簡體   English   中英

比較MySQL中的兩個子查詢

[英]Compare two subqueries in MySQL

我正在尋找完全匹配的列,這些列對一組相同的問題具有相同的答案。 他們的答案可能有所不同,我想找到兩個人回答相同的答案,並且我想獲得他們唯一的響應ID。

SELECT 
  response 
FROM 
  responses_questions 
WHERE (
  SELECT 
    answer 
  FROM 
    responses_questions 
  WHERE 
    response = '$my_response_id' 
  GROUP BY 
    question 
  ORDER BY 
    question 
  ASC
) = (
  SELECT 
    answer 
  FROM 
    responses_questions 
  GROUP BY 
    question 
  ORDER BY 
    question 
  ASC
)

我完全知道,上面的查詢將無法工作。

主要問題是我需要將“標准查詢”(由幾行組成)與數據庫的其余部分進行比較,以返回匹配的列組的響應ID。 基本上,對於每個問題,我都需要它們的所有答案都與我們要比較的“示例”查詢相同。 “比較兩個子查詢”。

我可以輕松地形象化所需的數據; 盡管如此,SQL並未考慮人類“可視化”的內容...

如果我需要提供更多信息,請在下面的評論中告訴我。

編輯:屏幕截圖/更多數據

這是一些示例數據的屏幕截圖:

數據庫實例 突出顯示的數據是我們在上面查詢的“第一”部分中正在選擇的數據。 我需要找到所有匹配的數據。

我的預期輸出應該是response列中的以下數字: 57 但不是6

請記住:會有數百個問題,因此有更多行要“比較”。 因此,請勿在其中硬編碼任何特定的問題編號。

EDITED

我在第一次嘗試回答時就意識到我誤讀了你的問題。 我認為您正在嘗試找出哪些人獲得了100%的收益,對嗎? 讓我知道我是否錯。

SELECT b.response
FROM responses_questions b
LEFT JOIN responses_questions a 
    ON a.question = b.question
    AND a.answer = b.answer
    AND a.response = '$my_response_id'
    AND a.response != b.response
GROUP BY b.response
HAVING COUNT(DISTINCT a.question) = COUNT(DISTINCT b.question)

這是通過按每個人分組來獲得每個人的問題和答案的集合而起作用的。 我們聯接到該表的一個版本中,該版本僅具有您正在說的“示例”響應ID,並且聯接時要使問題和答案都匹配。 我們使用LEFT JOIN,使任何不匹配項會對一個NULL a表。 最后,我們計算每個表中的條目數。 NULL條目不會添加到計數中,因此,如果有任何不匹配的行,則a表的計數將小於b表的計數。

順便說一句,您正在將您的 '$my_response_id'卡在中間,這讓我很警惕。 更好地使用准備好的查詢。 我希望您正在清理您的輸入。 - 好極了!

編輯

我添加了一個檢查以確保它也不會返回“示例” ID4。它應該可以正常工作。 我做了一個sqlfiddle並按照您的要求得到了5和7。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM