0

「コース」値を含み、「コース」がテーブル1に存在しないテーブル2のエントリのみを照会したい。最初に、「コース」の値に基づいて table1 を table2 に内部結合しました。これが私がこれまで持っているものですが、うまくいきません:

    $query = "SELECT value1,value2,value3 FROM table2 INNER JOIN table1 USING(course)
            WHERE table2.sem = '$semester' AND NOT EXISTS (SELECT course FROM table1)
            ORDER BY course";
    $result = mysql_query($query2) or die(mysql_error());

    while ($row2 = mysql_fetch_array($result))
    {
        print_r($row);echo "<br><br>";
    }

この内部結合コードは機能します:

    $query = "SELECT * FROM table1 INNER JOIN table2 USING(course) 
            WHERE table1.sem = '$semester'
            ORDER BY course";
    $result = mysql_query($query) or die(mysql_error());
4

2 に答える 2

3
$query = "SELECT value1,value2,value3 FROM table2 
            WHERE table2.sem = '$semester' AND course IS NOT NULL
            AND course NOT IN(SELECT course FROM table1)
            ORDER BY course";

編集: 左結合 (これも機能します) の代わりにこのルートを使用する理由について詳細な説明が必要な場合は、次の記事を参照してください。

http://explainextended.com/2009/09/15/not-in-vs-not-exists-vs-left-join-is-null-sql-server/

于 2012-07-26T15:55:30.217 に答える
2
SELECT value1,value2,value3 
FROM table2 t2
LEFT JOIN table1 t1 ON t2.course = t1.course
WHERE t1.course IS NULL
  AND t2.sem = '$semester'
ORDER BY course"; 
于 2012-07-26T16:00:57.923 に答える