MySQL插入到,如果不存在,则具有双重条件

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

如果电子邮件地址不存在于列表\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 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
      ) ;