[英]Select form table A where value in table B
表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个结果。
编辑*
因为里面有这么多数据,所以不能更改数据库结构。 我只是尝试优化旧代码。
您可以使用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
但我建议您标准化表格。
解决此问题的正确方法是更改表定义并使用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,则定义一个新表以维护关系AB:
表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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.