比较mysql中的两个表

时间:2013-08-01 12:44:50

标签: mysql compare

我有两个表,第一个(table1)有28500行,另一个(table2)有17450行。 我想比较这些表,发现table1行中不存在。

SELECT * FROM table1 WHERE ID NOT IN (SELECT DISTINCT(ID) FROM table2)

有什么建议吗?

7 个答案:

答案 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;

SQL小提琴:http://sqlfiddle.com/#!2/a9390/8

答案 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具有相同的列和值。如果任何一个表有任何额外的行,那么使用下面的查询可以获得无法匹配的结果。

阅读:Compare two tables in MySQL

答案 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

相关问题