0

表 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

次に、結果を保存して2番目のクエリに入れます

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構造を変更できません。古いコードを最適化しようとしています。

4

2 に答える 2

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

ただし、テーブルを正規化することをお勧めします。

于 2013-02-09T10:43:42.293 に答える
2

これを解決する適切な方法は、テーブル定義を変更し、JOIN を使用することです。例えば

表 A

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

表 B

id    
1  

B id 1 を持つテーブル A から名前を取得するには、次のように記述します。

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
于 2013-02-09T10:40:33.250 に答える