Join

連接具有某些相同值的表

  • August 20, 2018

我正在嘗試獲取具有相同 ADAPTERID 和 Attribute_Name 的行,但 Attribute_Value 可以處於活動狀態或自動設計。我用了:

SELECT * FROM database1 
where Attribute_Value IN ('ACTIVE','DESIGNED AUTOMATICALLY')
and Attribute_Name = 'State'
and ADAPTERID = '1277667' 

我得到:

ADAPTERID   CFS_Name        Attribute_Name  Attribute_Value
1277667     1277667-Željka  State           DESIGNED AUTOMATICALLY
1277667     1277667-Željka  State           DESIGNED AUTOMATICALLY
1277667     1277667-Željka  State           DESIGNED AUTOMATICALLY
1277667     1277667-Željka  State           ACTIVE

我怎樣才能得到這些實際上只是不同的:

ADAPTERID   CFS_Name        Attribute_Name  Attribute_Value
1277667     1277667-Željka  State           DESIGNED AUTOMATICALLY
1277667     1277667-Željka  State           ACTIVE

謝謝

如果您想查看包含多個值的記錄,Attribute_Value那麼您不能簡單地在 a 上使用過濾器,WHERE因為您想驗證組中的行(aWHERE將按行過濾,而不是按集合過濾)。

嘗試使用GROUP BYwithHAVING檢查特定集合的多個值是否存在,然後使用此結果顯示正確的記錄。

SELECT
   D.Attribute_Name,
   D.ADAPTERID,
   D.Attribute_Value
FROM
   (
       SELECT 
           Attribute_Name,
           ADAPTERID 
       FROM 
           database1 
       WHERE
           Attribute_Value IN ('ACTIVE','DESIGNED AUTOMATICALLY')
       GROUP BY
           Attribute_Name,
           ADAPTERID
       HAVING
           COUNT(DISTINCT(Attribute_Value)) > 1
   ) Mult
   INNER JOIN database1 D ON
       Mult.Attribute_Name = D.Attribute_Name AND
       Mult.ADAPTERID = D.ADAPTERID

Attribute_Value如果重複(按Attribute_Nameand ),這仍然會顯示多個相同的記錄ADAPTERID,然後您可以在DISTINCT之後添加SELECT以查看唯一性。如果您只對此值感興趣,您可能還想Attribute_Value在最外面進行過濾。SELECT

SELECT DISTINCT
   D.Attribute_Name,
   D.ADAPTERID,
   D.Attribute_Value
-- ...

此外,將過濾在其中一個或(在大多數數據庫上)INNER JOIN具有NULL值的行。如果您仍想顯示它們,則必須添加檢查函式(語法取決於 DBMS,如SQL Server 或Oracle)。Attribute_Name``ADAPTERID``NULL``ISNULL()``NVL()

嘗試使用 DISTINCT..

SELECT DISTINCT * FROM database1 
where Attribute_Value IN ('ACTIVE','DESIGNED AUTOMATICALLY')
and Attribute_Name = 'State'
and ADAPTERID = '1277667' 

引用自:https://dba.stackexchange.com/questions/215389