如何创建左连接而不重复左侧的行

时间:2012-03-08 12:31:49

标签: mysql database join

我有一个场景,其中有两个表(表A和表B)以一对多的关系链接。对于表A中的一行,B中的最大链接行数为2,这两行(如果存在)通过类型列(其值为x或y)彼此不同。

Aid | Name                            Bid  | type | Aid
1   | name1                             1  |  x   | 1
2   | name2                             2  |  x   | 2
3   | name3                             3  |  y   | 2

现在,我想要的是对两个表进行连接查询,以便显示A中的所有行(无重复)和两个名为类型x type y 将保存一个布尔/整数值,以显示A中每行的类型x和y的存在,即

Aid | Name  | Type X | Type Y |
1   | name1 |   X    |  NULL  |
2   | name2 |   X    |   Y    |
3   | name3 |  NULL  |  NULL  |

我的DBMS是MySql。

感谢。

2 个答案:

答案 0 :(得分:1)

嗯,这是因为您的第二个表使用了EAV-model。如果你有两个表,一个用于type_x,一个用于type_y,那么你的关系模式会更清晰。

当然,EAV确实有用,更笨拙:

SELECT a.aid, a.name, bx.type, by.type
FROM table_a a
LEFT JOIN table_b bx
ON a.aid = bx.aid
AND bx.type = 'x'
LEFT JOIN table_b by
ON a.aid = by.aid
AND by.type = 'y'

答案 1 :(得分:1)

你必须使用两个连接:

SELECT A.*, b1.type AS typeX, b2.type as typeY
FROM A
LEFT JOIN B b1
ON A.aid = b1.aid
AND b1.type = 'x'
LEFT JOIN B b2
ON a.aid = b2.aid
AND b2.type = 'y'