在另一个表列中按值选择列

时间:2016-12-26 20:12:16

标签: mysql

我有两张桌子:

表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列关联的所有名称。

2 个答案:

答案 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