选择两个表中不存在的值

时间:2017-04-11 11:04:02

标签: mysql

table1            table2             table3          Expected Result
-------------     --------------     -------------   ------
| id | col1 |     | id | col1  |     | id | col1 |   | id |
-------------     --------------     -------------   ------
| 1  | val1 |     | 2  | val1  |     | 3  | val1 |   | 1  |
| 2  | val2 |     | 2  | val2  |     | 3  | val2 |   | 6  |
| 3  | val3 |     | 4  | val1  |     | 5  | val1 |   ------
| 4  | val4 |     | 4  | val2  |     | 5  | val2 |
| 5  | val5 |     --------------     ------------
| 6  | val6 |
-------------

我想选择不在table2和table3中的table1的id。为此,我编写了一个查询,但执行时间太长。请用更好的查询建议我。

我使用的查询是 SELECT DISTINCT(id) FROM table1 WHERE yacht_id NOT IN (SELECT id FROM table2 UNION SELECT id FROM table3 ORDER BY id)

3 个答案:

答案 0 :(得分:2)

您的查询很好,但另一种方法是使用left join s

select  t1.id
from    table1 t1
left join
        table2 t2
on      t1.id = t2.id
left join
        table3 t3
on      t1.id = t3.id
where   t2.id is null and t3.id is null

这将保留table1中的所有行,并在nulltable2上无法使用table3时将其与null匹配。

从那里你要做的就是在table2table3上过滤cmake -DBOOST_ROOT=$Path_to_Boost cmake -DBoost_NO_BOOST_CMAKE=TRUE -DBOOST_ROOT=$Path_to_Boost cmake -DBoost_NO_BOOST_CMAKE=TRUE -DBoost_NO_SYSTEM_PATH=TRUE - DBOOST_ROOT=$Path_to_Boost 行。

答案 1 :(得分:2)

    sudo apt-get install php-pear
    sudo pear install mail
    sudo pear install Net_SMTP
    sudo pear install Auth_SASL
    sudo pear install mail_mime

你能试试吗

答案 2 :(得分:1)

为什么不尝试两个单独的In Clause

SELECT * FROM table1 a
LEFT JOIN table2 b on a.id = b.id
LEFT JOIN table3 c on a.id = c.id
WHERE b.id is null and c.id is null