查询需要获取另一个表的字符串列中不存在的一个表的列值

时间:2014-05-09 07:39:53

标签: mysql sql

我有两张桌子:

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 ');

但这不起作用 任何人都建议一种方法来做到这一点

1 个答案:

答案 0 :(得分:1)

使用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

这里有三个关键的事情:

  1. 使用左连接并在连接条件中包含额外条件
  2. 使用find_in_set()(在CSV字符串中查找值)来进行连接
  3. 使用where子句筛选出匹配项,只留下错过的联接