我有以下表格:
organisation
organisation_id
,organisation_name
srp_reseller_buffer
organisation_id
,property_id
我想编写一个MySQL查询,向我显示组织中的所有记录,但srp_reseller_buffer
中的记录除外,其中property_id
为X
这是我到目前为止所做的:
SELECT * FROM organisation
WHERE NOT EXISTS (
SELECT * FROM organisation
LEFT OUTER JOIN srp_reseller_buffer
ON srp_reseller_buffer.organisation_id = organisation.organisation_id
WHERE srp_reseller_buffer.property_id is NULL
那个SQL查询无效。它只显示了组织表中所有组织的列表。
答案 0 :(得分:4)
一个简单的左连接?
SELECT organisation.*
FROM organisation
LEFT JOIN srp_reseller_buffer ON
(organisation.organisation_id = srp_reseller_buffer.organisation.id AND property_id = 'X')
WHERE srp_reseller_buffer.organisation_id IS NULL
“右侧”(srp_reseller)上不存在的记录将为空。
答案 1 :(得分:0)
您需要在内部SELECT
语句中包含一个条件。
只需查看内部SELECT
语句:
SELECT * FROM organisation
LEFT OUTER JOIN srp_reseller_buffer
ON srp_reseller_buffer.organisation_id = organisation.organisation_id
WHERE srp_reseller_buffer.property_id is NULL
这可能会返回至少一条记录没有记录。
现在,由于您没有在外部SELECT
语句中包含条件,因此该查询将为organisation
表中的每条记录返回完全相同的结果。这应该等同于:
SELECT * FROM organisation
WHERE NOT EXISTS (<the result from the inner query>)
因为<the result from the inner query>
对organisation
中的所有记录都相同(特别是 不 为空),你得到整个organisation
表。
您可以尝试这样的事情:
SELECT * FROM organisation o
WHERE NOT EXISTS (
SELECT * FROM srp_reseller_buffer
WHERE srp_reseller_buffer.organisation_id = o.organisation_id
AND srp_reseller_buffer.property_id = X
)