繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM