我有两个表,第一个(table1)有28500行,另一个(table2)有17450行。 我想比较这些表,发现table1行中不存在。
SELECT * FROM table1 WHERE ID NOT IN (SELECT DISTINCT(ID) FROM table2)
有什么建议吗?
答案 0 :(得分:18)
试试这个:
SELECT table1.*
FROM table1
LEFT OUTER JOIN table2
ON table1.id = table2.id
WHERE table2.id IS NULL
LEFT OUTER JOIN
链接两个以table1开头的表,如果table2没有链接的行,则table2的所有字段都为null。因此,如果您放入WHERE
条件table2.id为null,则表示只有table1中的行不存在于table2中
答案 1 :(得分:2)
您可以通过执行左外连接并检查所有不存在的行来解决此问题。 请尝试以下操作,具体取决于您是否要查找table1中table1或table1中table2不存在的值。
SELECT *
FROM table1
LEFT OUTER JOIN table2 ON (table1.id = table2.id)
WHERE table2.id IS NULL;
SELECT *
FROM table2
LEFT OUTER JOIN table1 ON (table1.id = table2.id)
WHERE table2.id IS NULL;
答案 2 :(得分:2)
试试这个:
SELECT id, name
FROM (
SELECT id, name FROM table1
UNION ALL
SELECT id, name FROM table2
) tbl
GROUP BY id, name
HAVING count(*) = 1
ORDER BY id;
假设您有两个表table1和table2具有相同的列和值。如果任何一个表有任何额外的行,那么使用下面的查询可以获得无法匹配的结果。
答案 3 :(得分:1)
使用此查询:
SELECT
*
FROM
table2
LEFT JOIN
table1
ON
table2.primary_key = table1 .primary_key
WHERE
table1 .primary_key IS NULL
;
答案 4 :(得分:1)
好吧,如果你想在PHP中得到答案,那就是它:
$sql=mysql_query("SELECT * FROM table1");
while($row=mysql_fetch_array($sql))
{
$id=$row['id'];
$sql2=mysql_query("SELECT * FROM table2 WHERE id='$id'");
$check=mysql_num_rows($sql2);
if($check==0)
{
echo $id." is not in table1<br>";
}
}
我希望这可以帮到你
答案 5 :(得分:0)
如果要按所有列比较2个表(完全比较,而不仅仅是像ID这样的单个特定列),可以使用以下方法:
SELECT column1, column2, column3
FROM
(
SELECT t1.column1, t1.column2, t1.column3
FROM t1
UNION ALL
SELECT t2.column1, t2.column2, t2.column3
FROM t2
) t
GROUP BY column1, column2, column3
HAVING COUNT(*) = 1
ORDER BY column3
基于以下示例:http://www.mysqltutorial.org/compare-two-tables-to-find-unmatched-records-mysql.aspx
答案 6 :(得分:0)
SELECT * FROM table1
where id not in (
SELECT table2.id
FROM table2
LEFT OUTER JOIN table1
ON (
table1.id = table2.id
and table1.col1 = table2.col1
and table1.col2 = table2.col2
...
)
)
表1 的行多于表2