2014-05-09 29 views
1

我有兩個表:查詢需要得到它不存在於另一個表的字符串列一個表的列值

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中獲取ID不在第二個表的QuestionIdDetails列中的ID。

我試着查詢 Select ID from quizquestionbank where ID not in (Select QuestionIdDetails from quizuserdetails where msisdn = '235346 ');

但這不起作用 有誰能夠提出一個辦法做到這一點

回答

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 

這裏有3件關鍵的事情發生在這裏:

  1. 使用左連接,幷包括在連接條件
  2. 使用find_in_set(),這在一個CSV字符串找到一個值額外的條件,使加盟
  3. 使用篩選出相匹配的WHERE子句,只留下錯過加入
+0

用於通過OP測試小提琴:http://sqlfiddle.com/#!2/63198/1 –

+0

我有一個問題與此相關: 假設quizquestionbank表中的日期時間列,我想根據上述要求提取這些記錄,但是還有一個額外的限制,即當前時間應該小於表中的日期時間: 不會quizquestionbank工作 選擇*哪裏結束日期>(選擇disting qb.ID 從quizquestionbank QB 左加入quizuserdetails上FIND_IN_SET連用 (qb.id,QuestionIdDetails)> 0 和MSISDN = '235346' 其中QD .id爲空) – GP007

+0

你應該[問另一個問題](http://stackoverflow.com/questions/ask)然後 – Bohemian

相關問題