簡體   English   中英

查詢一個不同的值,其中columnA!= columnB

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM