我有两个表:
mysql> select * from quizquestionbank;
| ID | QuestionFilePath | CorrectAnswer |
| 1 | p.wav | 1 |
| 2 | q.wav | 2 |
| 3 | a.wav | 3 |
| 4 | b.wav | 1 |
| 5 | m.wav | 3 |
第二张表是:
mysql> select * from quizuserdetails;
| ID | MSISDN | QuestionIdDetails | AnswerRecord |
| 1 | 235346 | 1,3,4,5 | S,F,S,F |
| 2 | 564574 | 4,5,67,88 | F,S,F,s |
| 3 | 500574 | 5,55,66,44,2 | F,F,F,F |
我想从表 1 中获取第二个表的 QuestionIdDetails 列中不存在的 ID。
我试过查询
Select ID from quizquestionbank where ID not in (Select QuestionIdDetails from quizuserdetails where msisdn = '235346 ');
但这不起作用 任何人都可以建议一种方法吗
最佳答案
使用find_in_set()
将 id 与列表匹配,但这还不是全部:
Select disting qb.ID
from quizquestionbank qb
left join quizuserdetails qd
on find_in_set(qb.id, QuestionIdDetails) > 0
and msisdn = '235346'
where qd.id is null
这里发生了 3 件关键的事情:
- 使用左连接并在连接条件中包含额外条件
- 使用
find_in_set()
(在 CSV 字符串中查找值)进行连接 - 使用 where 子句过滤掉匹配项,只留下丢失的连接
关于mysql - 查询需要获取一个表的列值,而该列值不存在于另一个表的字符串列中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23559103/