ID class 1 A 2 A 3 B 4 C
表2
ID class 1 A 3 B 4 C
嗨,有一個簡單的方法來比較每個表的計數(類),以及如果2個表具有相同的計數,則返回ID和類。
想要得到如下結果:
ID class 3 B 4 C
ID class 1 A 2 A 3 B 4 C
表2
ID class 1 A 3 B 4 C
嗨,有一個簡單的方法來比較每個表的計數(類),以及如果2個表具有相同的計數,則返回ID和類。
想要得到如下結果:
ID class 3 B 4 C
一種方法是:
SELECT t1.ID, t1.Class
FROM Table1 t1
JOIN
(
SELECT Class, COUNT(*) AS NumberOf
FROM Table1
GROUP BY Class
) x1 ON t1.Class = x1.Class
JOIN
(
SELECT Class, COUNT(*) AS NumberOf
FROM Table2
GROUP BY Class
) x2 ON x1.Class=x2.Class AND x1.NumberOf = x2.NumberOf
編輯爲我本來誤解!我隨意剛剛返回從表1,其中一個給定類的數量兩個表中匹配
SELECT
tbl1.class
FROM
(SELECT class, count(1) as cnt FROM table1 GROUP BY class) tbl1,
JOIN (SELECT class, count(1) as cnt FROM table2 GROUP BY class) tbl2 ON tbl1.class=tbl2.class
WHERE
tbl1.cnt=tbl2.cnt
你不會得到的ID,因爲萬一有是B或C類的更多ID的ID,則數據庫引擎將不知道選擇哪一個。一旦你知道你需要什麼,你將不得不寫更復雜的查詢。
試試這個:
SELECT CLASS, ID
FROM TABLE1
WHERE CLASS IN
(SELECT CLASS FROM
(SELECT * FROM
(SELECT CLASS, COUNT(*) AS class_count
FROM table1
GROUP BY CLASS) T1
INNER JOIN
(SELECT CLASS, COUNT(*) AS class_count
FROM table2
GROUP BY CLASS) T2
USING (CLASS, CLASS_COUNT)));
這從table1的ID和CLASS和工程提供的測試數據。不保證適用於所有可能的數據組合。使用風險自負。不適用於醫療設備,空中交通管制系統或其他涉及嚴重傷害,死亡或責任風險的應用。你的旅費可能會改變。 16歲以下兒童的使用應由負責任的成年人監測。不要在有強磁場,強風或青蛙或其他小型兩棲動物的情況下使用。不鼓勵在有大型兩棲動物或食肉爬行動物的情況下使用。沒有在動物身上測試過 - 你會成爲第一個!
分享和享受。
你可以通過使用新的INTERSECT語句來獲得它。
有關這一新條款更多詳情,請看看這篇文章: