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