2011-06-22 11 views
1

database1.documentsからの行を選択するSQLクエリの作成を試みましたが、これはdatabase2.documentsに3回未満で表示される 'id'と同じです。IDが存在するSQL句が代替テーブルにX回存在する

Database2.documentsは外部ID(database2.documents.doc_id = database1.documents.id)を使用します。

私は基本的な考え方に私のクエリを削減している:

SELECT database1.documents.id, database1.documents.title, database1.documents.date 
    FROM database1.documents 
WHERE COUNT (database1.documents.id = database2.documents.doc_id) < 3 

は、ここで望ましい結果の例です:

+---------------------------+ 
| Database 1: 'documents' | 
|---------------------------| 
| id | title | date  | 
|----+---------+------------| 
| 1 | Title 1 | 01/01/2011 | 
| 2 | Title 2 | 02/01/2011 | 
| 3 | Title 3 | 03/01/2011 | 
+---------------------------+ 
+---------------------------+ 
| Database 2: 'documents' | 
|---------------------------| 
| id | doc_id | date  | 
|----+--------+-------------| 
| 1 | 2  | 01/01/2011 | 
| 2 | 3  | 02/01/2011 | 
| 3 | 2  | 03/01/2011 | 
| 4 | 2  | 04/01/2011 | 
+---------------------------+ 
+---------------------------+ 
| Result     | 
|---------------------------| 
| id | title | date  | 
|----+---------+------------| 
| 1 | Title 1 | 01/01/2011 | 
| 3 | Title 3 | 03/01/2011 | 
+---------------------------+ 

それは動作しません、どのように私はこれを達成行くのです?指導の言葉が最も高く評価されます、ありがとうございます。 :3

答えて

1

集約関数に基づく条件がHAVINGに置かれるべきではなく、WHERE句:

SELECT d1.id, d1.title, d1.date, COUNT(*) 
FROM database1.documents d1 
LEFT JOIN database2.documents d2 ON (d1.id = d2.doc_id) 
GROUP BY d1.id, d1.title, d1.date 
HAVING COUNT(*) < 3 

もう一つの選択肢は、それのように導出クエリを使用することです他の人によって提案されました

+0

魅力のように働いて、ありがとう! :D – escproxy

0
-- here's how to get the docid's from d2 that happen 3 times. 

select * 
from database1.document d1, 
(
select count(*), d2.documentid 
from database2.document d2 
group by d2.documentid 
having count(*) >= 3 
) ds2 
where ds2.documentid = d1.documentid 
+0

グループによってあなたが何回何回カウントすることができるようにする必要があります彼は存在する。 3回未満のレコードをフィルタリングすることです。私はd1とそれに参加するフォームのサブクエリに入れます。結合は内部結合であり、一致するものに結果を制限します。 –

+0

構文は間違ったやり方で働き、代わりにdatabase2にあるdoc_idのものだけを私に渡しました。とにかくありがとう^ _^ – escproxy

0

これを試してみてください:

SELECT * 
    FROM database1.documents a LEFT JOIN 
     (
     SELECT doc_id, COUNT(1) cnt_docs 
      FROM database2.documents 
      GROUP BY doc_id 
     ) b 
    ON a.id = b.doc_id 
    AND b.cnt_docs < 3 
関連する問題