簡體   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