MySQL插入到,如果不存在,则具有双重条件
如果电子邮件地址不存在于列表\u email.email\u addr中,并且不存在于列表\u no\u email.email\u addr中,我正在尝试插入新记录MySQL插入到,如果不存在,则具有双重条件,mysql,sql,Mysql,Sql,如果电子邮件地址不存在于列表\u email.email\u addr中,并且不存在于列表\u no\u email.email\u addr中,我正在尝试插入新记录 INSERT INTO list_email(fname, lname, email_addr) VALUES('bob', 'schmoe', 'bogus@bogus.com'), ('mary', 'lamb', 'hoe@me.com'); SELECT email_addr FROM list_email WHERE N
INSERT INTO list_email(fname, lname, email_addr) VALUES('bob', 'schmoe', 'bogus@bogus.com'), ('mary', 'lamb', 'hoe@me.com');
SELECT email_addr FROM list_email
WHERE NOT EXIST(
SELECT email_addr FROM email_addr WHERE email_addr = $post_addr
)
WHERE NOT IN (
SELECT email_addr FROM list_no_email WHERE email_addr = $post_addr
)LIMIT 1
**************************** mysql tables ******************************
mysql> desc list_email;
+------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| list_name | varchar(55) | YES | | NULL | |
| fname | char(50) | YES | | NULL | |
| lname | char(50) | YES | | NULL | |
| email_addr | varchar(150) | YES | | NULL | |
+------------+--------------+------+-----+---------+----------------+
5 rows in set (0.00 sec)
mysql> desc list_no_email;
+------------+--------------+------+-----+-------------------+-----------------------------+
| Field | Type | Null | Key | Default | Extra |
+------------+--------------+------+-----+-------------------+-----------------------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| date_in | timestamp | NO | | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP |
| email_addr | varchar(150) | YES | | NULL | |
+------------+--------------+------+-----+-------------------+-----------------------------+
3 rows in set (0.00 sec)
*****************错误**************
*************没有****************
替换
与
编辑
替换
与
替换
与
编辑
替换
与
试着这样做:
INSERT INTO list_email($username.$rowname, fname, lname, list_email) VALUES(?,?,?,?,?)
SELECT email_addr FROM list_email AS tmp
WHERE email_addr NOT IN(
SELECT email_addr FROM list_email WHERE email_addr = $post_addr)
WHERE email_addr NOT IN (SELECT email_addr FROM list_no_email
WHERE email_addr = $post_addr)
LIMIT 1;
试着这样做:
INSERT INTO list_email($username.$rowname, fname, lname, list_email) VALUES(?,?,?,?,?)
SELECT email_addr FROM list_email AS tmp
WHERE email_addr NOT IN(
SELECT email_addr FROM list_email WHERE email_addr = $post_addr)
WHERE email_addr NOT IN (SELECT email_addr FROM list_no_email
WHERE email_addr = $post_addr)
LIMIT 1;
问题是。。。什么?我想知道怎么做。我到了那一点,我的大脑开始思考,问题是。。。什么?我想知道怎么做。当我说到这一点时,我的大脑转向了错误106442000:您的SQL语法有一个错误;检查与您的MySQL服务器版本对应的手册,以了解在第行的“SELECT email\u addr AS tmp WHERE email\u addr NOT IN SELECT email\u a”附近使用的正确语法1@brad我不知道你所说的“选择电子邮件地址”是什么意思?请你解释一下你想从中得到什么?选择“电子邮件地址”列?我试图将插入的新电子邮件地址与list_email.email_addr和list_no_email.email_addrIt进行比较,但仍然不喜欢select.ERROR 1064 42000:您的SQL语法有错误;检查与您的MySQL服务器版本对应的手册,以了解在第行的“SELECT email\u addr AS tmp WHERE email\u addr NOT IN SELECT email\u a”附近使用的正确语法1@brad我不知道你所说的“选择电子邮件地址”是什么意思?请你解释一下你想从中得到什么?选择“电子邮件地址”列?我正在尝试将插入的新电子邮件地址与list\u email.email\u addr和list\u no\u email.email\u addrIt进行比较,但仍然不喜欢选择。它不完全起作用,我确信我把事情搞砸了。@brad your SELECT email\u addr FROM list\u emailSELECT email\u addr AS tmp这个条件是错误的…删除SELECT email\u addr行并尝试现在转到下一个错误…您有两个where子句不正确…使用left join或union all在单个子句中获取所有电子邮件,其中clauseit正在执行相同的操作。它到达了插入的末尾,并停止了它的工作,我确信我把事情搞砸了。@brad your SELECT email\u addr FROM list\u emailSELECT email\u addr AS tmp这个条件是错误的…删除SELECT email\u addr行并尝试现在转到下一个错误…您有两个where子句不正确…使用left join或union all在单个子句中获取所有电子邮件,其中clauseit正在执行相同的操作。到了插页的末尾,博克斯你能详细说明一下工会是如何运作的吗?使用静态数据,代码工作得非常完美,但试图使用变量将其集成到php中,我只是不知道如何使其工作。静态电子邮件地址会变成单独的table.column名称吗?如果要插入2行,我给出的代码就是一个示例。您可以将其扩展到3、4、…、20、。。。我假设您一次只想插入几行。如果你想把它们成千上万地插入,那就太麻烦了。你能详细说明一下工会是如何运作的吗?使用静态数据,代码工作得非常完美,但试图使用变量将其集成到php中,我只是不知道如何使其工作。静态电子邮件地址会变成单独的table.column名称吗?如果要插入2行,我给出的代码就是一个示例。您可以将其扩展到3、4、…、20、。。。我假设您一次只想插入几行。如果你想把它们成千上万地插入,那就太麻烦了。
WHERE NOT EXIST(
WHERE email_addr NOT IN(
SELECT email_addr FROM list_email
WHERE NOT IN
(
SELECT email_addr FROM email_addr WHERE email_addr = $post_addr
)
WHERE NOT IN
(
SELECT email_addr FROM list_no_email WHERE email_addr = $post_addr
)LIMIT 1
SELECT email_addr FROM list_email
WHERE NOT IN
(
SELECT email_addr FROM email_addr WHERE email_addr = $post_addr
UNION ALL
SELECT email_addr FROM list_no_email WHERE email_addr = $post_addr
)
LIMIT 1
INSERT INTO list_email($username.$rowname, fname, lname, list_email) VALUES(?,?,?,?,?)
SELECT email_addr FROM list_email AS tmp
WHERE email_addr NOT IN(
SELECT email_addr FROM list_email WHERE email_addr = $post_addr)
WHERE email_addr NOT IN (SELECT email_addr FROM list_no_email
WHERE email_addr = $post_addr)
LIMIT 1;
INSERT INTO list_email
(fname, lname, email_addr)
SELECT ins.*
FROM
( SELECT 'bob' AS fname,
'schmoe' AS lname,
'bogus@bogus.com' AS email_addr
FROM dual
UNION ALL -- for every row to be inserted
SELECT 'mary', 'lamb', 'hoe@me.com'
FROM dual
-- add another UNION ALL .. FROM dual
) AS ins
WHERE NOT EXISTS
( SELECT 1
FROM email_addr AS e
WHERE e.email_addr = ins.email_addr
)
AND NOT EXISTS
( SELECT 1
FROM list_no_email AS ne
WHERE ne.email_addr = ins.email_addr
) ;