php从多重双重选择

时间:2011-03-20 11:26:26

标签: php mysql

我想将一些数据插入数据库。在插入过程中,我想先做一个判断:如果table1和table2中不存在title,则插入。怎么写这个双重句子?这是正确的吗?或者......谢谢。

mysql_query("
INSERT INTO table1 title 
SELECT '".$title."' 
FROM dual 
WHERE not exists (
    SELECT title 
    FROM table1 
    WHERE table1.title = '".$title."'
) AND (
    SELECT title 
    FROM table2
    WHERE table2.title = '".$title."'
) ");

3 个答案:

答案 0 :(得分:3)

首先,MySQL不使用dual表。只需直接选择值即可。通常要插入表格,您只需要使用

INSERT INTO table1(title) SELECT 'something'; # or
INSERT INTO table1(title) VALUES ('something');

但是,下面使用一个组合表(别名TT)来对其他表使用LEFT JOIN。

mysql_query("
    INSERT INTO table1(title)
    SELECT theTitle
    FROM (SELECT '".$title."' theTitle) TT
    LEFT JOIN table1 ON table1.title = TT.theTitle
    LEFT JOIN table2 ON table2.title = TT.theTitle
    WHERE table1.title is null and table2.title is null
");

您也可以完成NOT EXISTS条款

mysql_query("
    INSERT INTO table1(title)
    SELECT '".$title."'
    WHERE NOT EXISTS (SELECT * FROM table1 WHERE title = '".$title."')
      AND NOT EXISTS (SELECT * FROM table2 WHERE title = '".$title."')
");

但我更喜欢前者,因为这需要你使用$ title 3次。

答案 1 :(得分:1)

mysql_query("INSERT INTO table1 title 
               SELECT '".$title."' FROM dual 
               WHERE not exists (SELECT title FROM table1 WHERE table1.title = '".$title."') AND 
                     not exists (SELECT title FROM table2 WHERE table2.title = '".$title."') ");

在查询中缺少第二个not exists

答案 2 :(得分:0)

联盟任何人?

mysql_query("
INSERT INTO table1 title 
SELECT '".addSlashes($title)."' 
FROM dual 
WHERE not exists (
   SELECT title 
   FROM table1 
   WHERE title = '".addSlashes($title)."'
   UNION
   SELECT title 
   FROM table2 
   WHERE title = '".addSlashes($title)."'
) ");