我在两个不同的数据库上有两个表。
我希望从表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'
答案 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)