我有两张桌子:
表A :
id | name
表B :
id | hash | owners_id
owners_id
包含表A中的ID。
示例:
表A :
id | name
1 | James
2 | Jonas
表B :
id | hash | owners_id
1 | j28sj | 1,2
期待结果:
James | j28sj
Jonas | j28sj
因为两者都包含ownerds_id
我正在尝试创建一个查询,选择表A中与表B owners_id
列关联的所有名称。
答案 0 :(得分:0)
有几种方法可以做到这一点。如果你想将owners_id保持为以逗号分隔的字符串,那就有点乱了。您需要首先将字符串解析为整数列表以形成连接条件:
SELECT A.name, B.hash FROM A
LEFT JOIN B
ON find_in_set(A.id,B.owners_id) <> 0;
如果您可以更改架构,则可能需要考虑让owner_id为表A的整数外键。
这是一个有效的SQL小提琴: http://sqlfiddle.com/#!9/320477/4
答案 1 :(得分:0)
SELECT
A.name,
B.hash
FROM
A
left JOIN B ON
B.owners_id LIKE CONCAT('%', A.id, '%')
注意:你设计的数据库设计很差,你可能无法使用你拥有1,11,111之类的所有者。所以你需要制作具有多对多关系的单独表格,或者输入前导零如001,011,111