我正在摸着MySQL子查询。而且只有在刮了几个小时之后我才会在SO中发布它。所以这就是:
$query_1 = "SELECT *
FROM table_new
WHERE table_new.NAME NOT IN ('text I know does not exist') ";
$query_2 = "SELECT *
FROM table_new,
table_old
WHERE table_new.NAME = table_old.NAME ";
$query_3 = "SELECT *
FROM table_new
WHERE table_new.NAME NOT IN (SELECT *
FROM table_new,
table_old
WHERE table_new.NAME = table_old.NAME) ";
问题在于:
$ query_1和$ query_2工作。但是当我在$ query_3中组合它们时,它不起作用。
有什么想法吗?
答案 0 :(得分:3)
使用:
SELECT *
FROM table_new
WHERE table_new.NAME NOT IN (SELECT table_old.NAME
FROM table_old)
标准SQL只允许IN子句中的一列进行列比较 - 您不能在SELECT *
子句中使用IN
,因为不清楚在外部比较哪些列值查询。但是,根据我的知识,MySQL是唯一支持元组的。
还有其他方法可以编写查询以获得相同的结果:
SELECT x.*
FROM TABLE_NEW x
WHERE NOT EXISTS (SELECT NULL
FROM TABLE_OLD x
WHERE y.NAME = x.NAME)
...或:
SELECT x.*
FROM TABLE_NEW x
LEFT JOIN TABLE_OLD y ON y.NAME = x.NAME
WHERE y.column_in_table_old IS NULL
哪些表现最佳取决于比较的列是否可以为空。 For more info, see this page