4

変数 $lid を持つ php ページと、変数 $uid を持つユーザーがいます...ページに入力するには、2 つのテーブルからいくつかのデータを選択する必要があります。

        Table 1                          Table 2
¦----------¦----------¦    ¦----------¦----------¦----------¦
¦    qid   ¦    lid   ¦    ¦   owner  ¦   qid    ¦timestamp ¦
¦----------¦----------¦    ¦----------¦----------¦----------¦

現在のページの $lid で qid がまだ table1 にリストされていない場合、所有者 = $uid であるテーブル 2 からすべてを取得する SQL ステートメントを作成する必要があります。

私は試した

SELECT * FROM table_two WHERE qid != (SELECT qid FROM table_one WHERE lid = " . $lid .") AND owner = " . $uid . ";

しかし、喜びはありませんでした

何か案は?

4

6 に答える 6

8

これはうまくいきます:

SELECT * 
FROM table_two 
WHERE qid not in (
    SELECT qid 
    FROM table_one 
    WHERE lid = " . $lid .") 

これはおそらくパフォーマンスが向上します。

SELECT T2.* 
FROM table_two t2
LEFT OUTER JOIN table_one T1 ON T2.QID = T1.QID 
    AND T1.LID = " . $lid ."
WHERE T1.qid IS NULL
于 2012-08-10T13:21:52.247 に答える
3

LEFT JOIN最高のパフォーマンスを得るには、次を使用する必要があります。

SELECT a.*
FROM table_two a
    LEFT JOIN table_one b
        ON a.qid = b.qid AND
           b.lid = " . $lid ."
WHERE b.qid IS NULL;

結合の視覚的な説明を参照してください

于 2012-08-10T13:22:30.337 に答える
1
SELECT * FROM table_two WHERE qid NOT IN (SELECT qid FROM table_one WHERE lid = " . $lid .")

NOT IN句を使用します。これにより、 にない ID が得られますsubquery

編集Left-Join, Inを 使用することもできますが、これMSSQLはあまり効率的ではありませんが、これはMySQL(私はそれに気づきませんでした) ため、同等に実行されます。ここで見ることができます

于 2012-08-10T13:21:53.250 に答える
1
SELECT * FROM table_two WHERE qid not in 
    (SELECT qid FROM table_one WHERE lid = " . $lid .")
于 2012-08-10T13:22:00.950 に答える
0

あなたは使用することを提案しました:

SELECT * 
FROM table_two 
WHERE qid not in (
    SELECT qid 
    FROM table_one 
    WHERE lid = " . $lid .") 

私も同じprblmを取得しましたが、「notin」で置き換えられている間、それは私から機能します

于 2012-08-21T10:05:55.903 に答える
-1

私は使用すると言うでしょう

SELECT * FROM table_two WHERE NOT EXISTS (SELECT NULL FROM table_one WHERE lid = " . $lid .")

NOT EXISTS 句を使用すると、NOT IN よりも優れたクエリ プランが得られます。

于 2012-08-10T13:24:20.643 に答える