2012-07-30 58 views
0

表-A具有ENTITY_ID左加入同一个表,但具有不同的值?

表-B具有相关ENTITY_IDattribute_id = 1

表-B具有相关ENTITY_IDattribute_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合并到一个查询中。

+0

这是一对多的关系吗?我的意思是,这两个属性是在同一列? (这意味着,不同的行)?在这种情况下,Table_b.Value会显示哪个值?从哪一行? – 2012-07-30 22:14:26

回答

1

您可以再次加入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' 
+0

这些比较不应该是“Table_B2.entity_id”吗? – 2012-07-30 22:34:19

+0

是的 - 好赶上!固定。 – Andrew 2012-07-31 04:06:30

+0

看起来不错,我会尝试这一点以后谢谢! – 2012-07-31 13:13:03

1

那么你可以简单地用两种简单的方法

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 
0

为什么如果你想同时获得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) 
相关问题