MySQL从一个表中选择另一个表中不存在的记录

时间:2013-05-23 15:45:41

标签: mysql sql select

我在两个不同的数据库上有两个表。

我希望从表mlsdata中选择MLS_LISTING_ID字段中的值,如果表ft_form_8中不存在这些值。

mlsdata表中共有5条记录。 ft_form_8表中有2个匹配的记录。

运行此查询,我从mlsdata而不是3中收到所有5条记录。

将NOT IN更改为IN,我得到两个表中的2个匹配记录。

有什么想法吗?

SELECT DISTINCT
    flrhost_mls.mlsdata.MLS_LISTING_ID
FROM
    flrhost_mls.mlsdata
        INNER JOIN
    flrhost_forms.ft_form_8 ON flrhost_mls.mlsdata.MLS_AGENT_ID = flrhost_forms.ft_form_8.nar_id
WHERE
    flrhost_mls.mlsdata.MLS_LISTING_ID NOT IN ((SELECT flrhost_forms.ft_form_8.mls_id))
        AND flrhost_mls.mlsdata.MLS_AGENT_ID = '260014126'
        AND flrhost_forms.ft_form_8.transaction_type = 'listing' 

3 个答案:

答案 0 :(得分:2)

你的问题:

  

我希望从表mlsdata中选择MLS_LISTING_ID字段中的值,如果表ft_form_8中不存在这些值。

是经典的OUTER JOIN问题

SELECT DISTINCT
  flrhost_mls.mlsdata.MLS_LISTING_ID, flrhost_forms.ft_form_8.MLS_LISTING_ID
 FROM 
   flrhost_mls.mlsdata
 LEFT OUTER JOIN
   flrhost_forms.ft_form_8
 ON
   flrhost_mls.mlsdata.MLS_LISTING_ID=flrhost_forms.ft_form_8.MLS_LISTING_ID
 WHERE
   flrhost_forms.ft_form_8.MLS_LISTING_ID IS NULL;

这比使用一些复杂的子查询嵌套简单得多。

答案 1 :(得分:1)

SELECT DISTINCT
    flrhost_mls.mlsdata.MLS_LISTING_ID
FROM
    flrhost_mls.mlsdata
where
    flrhost_mls.mlsdata.MLS_LISTING_ID NOT IN (SELECT 
            flrhost_forms.ft_form_8.mls_id
        FROM
            flrhost_forms.ft_form_8)

答案 2 :(得分:0)

SELECT DISTINCT
  flrhost_mls.mlsdata.MLS_LISTING_ID
FROM flrhost_mls.mlsdata
INNER JOIN flrhost_forms.ft_form_8 
ON flrhost_mls.mlsdata.MLS_AGENT_ID = flrhost_forms.ft_form_8.nar_id  
WHERE flrhost_mls.mlsdata.MLS_AGENT_ID = '260014126'
  AND flrhost_forms.ft_form_8.transaction_type = 'listing' 
  AND flrhost_mls.mlsdata.MLS_LISTING_ID NOT IN (SELECT b.mls_id FROM flrhost_forms.ft_form_8 b)