0

の条件としてを使用する方法でSQLJOINを使用したいと思います。COUNTCOUNTJOIN

例えば

SELECT * FROM tbl1
  INNER JOIN (SELECT * FROM tbl2) t2
  ON (SELECT COUNT(*) FROM tbl1) > 0

これは可能ですか、それとも誰かが別の方法を教えてもらえますか?

PS-私が持っている本当の質問は、2つのテーブルAとBがあり、作成日が値よりも大きいAからidを選択する必要があるということです。同時に、テーブルBのテーブルAにそのIDがないことを確認したいと思います。これは正常に機能しますが、テーブルBにデータがない場合、クエリは結果を返しません。

SELECT a.user_id from (SELECT * FROM A WHERE DATEDIFF(event_date,'certain_value') >=another_value) a INNER JOIN B b ON a.user_id != b.user_id

このようにカウントを使おうとしましたが失敗しました

SELECT a.user_id from (SELECT * FROM A WHERE DATEDIFF(event_date,'certain_value') >=another_value) a INNER JOIN B b ON count(B.user_id) = 0 OR a.user_id != b.user_id
4

3 に答える 3

1

クエリの記述方法では、条件ONは何も実行せず、同等ですON (1=1)(tbl1にレコードがない場合は、select * from tbl1 inner join tbl2 on [any condition]常に空の結果セットが返されます)。

あなたの更新された質問から私はあなたが必要だと思います:

SELECT
    a.user_id
FROM
    (SELECT *
     FROM   A
     WHERE  DATEDIFF(A.event_date, 'certain_value') >= another_value) AS a
WHERE
    NOT EXISTS (SELECT 1
                FROM   b
                WHERE  b.user_id = a.user_id)  
于 2012-07-02T15:52:58.957 に答える
0

これを試して:

SELECT A.user_id
FROM A
WHERE DATEDIFF(A.event_date,'certain_value') >= another_value)
  AND NOT EXISTS (SELECT B.user_id FROM B Where A.user_id = B.user_id)
于 2012-07-02T15:35:46.017 に答える
0

「内部結合は、結合条件に一致する両方のテーブルからの行が少なくとも1つある場合にのみ、行を返します。」必要なのはOUTERJOINで、Bにデータがない場合でも結果を取得できます。http://msdn.microsoft.com/en-us/library/aa213228%28v=SQL.80%29を参照してください。 aspx

あなたが使用したいかもしれませんが、私があなたの質問を正しく理解している場合:

WHERE a.user_id NOT IN (SELECT user_id FROM B)

Bからデータをまったく選択していないため、テーブルで結合を行うのではなく、条件に応じて

于 2012-07-02T17:15:31.903 に答える