簡體   English   中英

左連接相同的表但具有不同的值?

[英]Left Joining same table but with different values?

Table_A具有entity_id

Table_B具有相關的entity_id ,其attribute_id = 1

Table_B具有相關的entity_id ,其attribute_id = 2

  SELECT Table_B.value
    FROM  Table_A
    LEFT JOIN Table_B
    ON Table_A.entity_id = Table_B.entity_id
    WHERE Table_A.date =  '2012-7-30 00:00:00'
    AND Table_B.attribute_id = 1

我想將attribute_id = 1和attribute_id = 2放入一個查詢中。

您可以第二次加入Table_B並使用AS為其指定一個新名稱(別名)。

SELECT Table_B.value, Table_B2.value
FROM  Table_A
LEFT JOIN Table_B
ON Table_A.entity_id = Table_B.entity_id
LEFT JOIN Table_B AS Table_B2
ON Table_A.entity_id = Table_B2.entity_id
WHERE Table_A.date =  '2012-7-30 00:00:00'
AND Table_B.attribute_id = 1
AND Table_B2.attribute_id = 2

您還可以移動屬性條件,使其更清晰:

SELECT Table_B.value, Table_B2.value
FROM  Table_A
LEFT JOIN Table_B
ON Table_A.entity_id = Table_B.entity_id AND Table_B.attribute_id = 1
LEFT JOIN Table_B AS Table_B2
ON Table_A.entity_id = Table_B2.entity_id AND Table_B2.attribute_id = 2
WHERE Table_A.date =  '2012-7-30 00:00:00'

那么你可以通過兩種簡單的方法來做到這一點

select 
    t1.entity_id,
    t2.attribute
from t1
left join t2 on t2.entity_id = t1.entity_id;

要么

select 
    t1.entity_id,
    group_concat(t2.attribute) as Attr
from t1
left join t2 on t2.entity_id = t1.entity_id
group by t1.entity_id

如果你想同時獲得attribute_id = 1和2,為什么不使用OR作為條件?

SELECT Table_B.value
FROM  Table_A
LEFT JOIN Table_B
ON Table_A.entity_id = Table_B.entity_id
WHERE Table_A.date =  '2012-7-30 00:00:00'
AND (Table_B.attribute_id = 1 OR Table_B.attribute_id = 2)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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