![](/img/trans.png)
[英]SQL How to select columnA and columnB where columnB has a distinct value
[英]Query a distinct value where a columnA != columnB
我正在嘗試選擇ID = '12-027-013'
不屬於的組的ID = '12-027-013'
。
我已經試過這個查詢。
SELECT DISTINCT groups.group_ID, groups.group_name
FROM groups INNER JOIN group_member
ON groups.group_ID = group_member.group_ID
WHERE groups.group_name LIKE "%e%"
AND group_member.ID != "12-027-013"
但它仍顯示ID = '12-027-013'
的組。
這些是我的桌子
表格: 組
表格: group_member
這是我查詢的結果
任何幫助將非常感激。 謝謝。
嘗試這個
SELECT DISTINCT
groups.group_ID,
groups.group_name
FROM groups
INNER JOIN group_member
ON groups.group_ID = group_member.group_ID
LEFT OUTER JOIN (SELECT group_id FROM group_member WHERE group_member.ID = "12-027-013") gm ON group_member.group_id=gm.group_id
WHERE groups.group_name LIKE "%e%"
AND gm.group_id IS null
我認為最好的方法就是LEFT JOIN
:
SELECT g.group_ID, g.group_name
FROM groups g LEFT JOIN
group_member gm
ON gm.group_ID = g.group_ID AND
gm.ID = '12-027-013'
WHERE g.group_name LIKE '%e%' AND
gm.group_ID IS NULL;
它沒有DISTINCT
,因此它的性能應比原始查詢好得多。
一個類似的替代方法是NOT EXISTS
:
SELECT g.*
FROM groups g
WHERE g.group_name LIKE '%e%' AND
NOT EXISTS (SELECT 1
FROM group_member gm
WHERE gm.group_ID = g.group_ID AND
gm.ID = '12-027-013'
);
這兩個版本都可以利用groups(group_name, group_id)
和group_member(group_id, id)
上的索引來獲得最佳性能。
嘗試這個:
SELECT DISTINCT groups.group_ID, groups.group_name
FROM groups INNER JOIN group_member
ON groups.group_ID = group_member.group_ID
WHERE groups.group_name LIKE "%e%"
AND group_member.ID NOT LIKE "%12-027-013%" //if the type of id is text
問題出在“!=”。 應該不像
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.