选择表格表格A表格中的值

时间:2013-02-09 10:34:54

标签: mysql

表A

id    name
1     name1
2     name2
3     name3
4     name4

表B

id    userlist
1     1,2,3,4

我现在所做的是

SELECT `userlist` FROM `table B` WHERE `id` = 1

然后保存结果并输入第二个查询

SELECT `name` FROM `table A` WHERE `id` in ($userlist)

只是想知道是否有更好的方法。我试试

SELECT `name` FROM `table A` WHERE `id` in (SELECT `userlist` FROM `table B` WHERE `table B`.`id` = 1)

但它只返回1个结果。

编辑*

DB结构因为里面的数据太多而无法改变。我只是尝试优化旧代码。

2 个答案:

答案 0 :(得分:3)

您可以使用FIND_IN_SET

SELECT `name`
FROM `table A` INNER JOIN `table B` ON
     FIND_IN_SET(`table A`.`id`, `table B`.`userlist`)
WHERE `table B`.`id` = 1

但我建议你规范你的表格。

答案 1 :(得分:2)

解决此问题的正确方法是更改​​表定义并使用JOIN。例如

表A

id    name    b_id
1     name1   1
2     name2   1
3     name3   1
4     name4   1

表B

id    
1  

要从表A获取具有B id 1的名称,您需要写:

select name from A join B on A.b_id = B.id where B.id = 1

或者,如果您无法更改表A,请定义一个新表来维护关系A-B:

表A

id    name
1     name1
2     name2
3     name3
4     name4

表B

id    
1     

表A_B

a_id b_id
1    1
2    1
3    1
4    1

用于提取数据的SQL:

select name from A join A_B on A.id = A_B.b_id where A_B.b_id = 1