我有一个场景,其中有两个表(表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。
感谢。
答案 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'