0

次のようなテーブルがあります。

table name: uno
str_id | title
----------
 "a1"  | "hi"
 "b2"  | "bye"
 "c3"  | "etc."

table name: dos
str_id | other_col_name
-------------------------
   "b2"  |  1
   "b2"  |  5
   "a1"  |  6
   "b2"  |  7

クエリで の値を調べて、 の値uno.str_idが最も多い str_ids の順序を見つけたいと思いますdos.str_id。それらを str_id で結合してから、カウント順に並べる必要があると思いますが、SQL 構文でこれを行う方法がわかりません。お時間をいただきありがとうございます。

4

1 に答える 1

1
SELECT u.str_id FROM uno u
INNER JOIN dos d ON d.str_id = u.str_id
GROUP BY u.str_id
ORDER BY COUNT(*) DESC;

編集

可能な WHERE 部分は JOIN 部分の後に配置する必要があります (SQL 構文)。

「同じ名前の」フィールドを持つ 2 つのテーブルに対してクエリを実行している場合、これらの共通フィールドで何かを行う場合は、エイリアス (または完全なテーブル名) を使用する必要があります。そのクエリでは、テーブル uno は "u" としてエイリアスされ、テーブル dos は "d" としてエイリアスされます。つまり、uno と dos にフィールド タイトルがある場合、uno.title をクエリするには u.title を記述する必要があります。

エイリアスのあるバージョン:

SELECT u.str_id FROM uno u
INNER JOIN dos d ON d.str_id = u.str_id
GROUP BY u.str_id
WHERE u.title = 'bla blabla'
AND d.title IN ('asdf', 'ersg')
ORDER BY COUNT(*) DESC;

エイリアスなしのバージョン (DBMS の混乱を避けるための完全なテーブル名)

SELECT uno.str_id FROM uno 
INNER JOIN dos  ON dos.str_id = unon.str_id
GROUP BY uno.str_id
WHERE uno.title = 'bla bla bla'
AND dos.title IN ('asdf', 'ersg')
ORDER BY COUNT(*) DESC;
于 2012-06-25T22:28:53.040 に答える