1

我的数据库中有(Table1.column1 和 Table1.column2)和另一个(Table2.column1 和 Table2.column2),我想得到结果,其中(Table1.column1 和 Table1.column2)值在(Table2.column1 和 Table2 中找不到) .column2)?

Table1                          Table2
------------------------        ------------------------
 sid   sname    sclass            rid  rname    rclass
------------------------        ------------------------
| 1 | glass  | a class |        | 1 | glass  | b class |
| 2 | glass  | c class |        | 2 | glass  | c class |
| 3 | ice    | a class |        | 3 | ice    | b class |
| 4 | ice    | b class |        | 4 | ice    | c class |
| 5 | fridge | a class |        | 5 | fridge | a class |
| 5 | fridge | b class |        | 5 | fridge | c class |
------------------------        ------------------------

结果应该是:

Result Table
------------------------
 sid   sname    sclass 
------------------------
| 1 | glass  | a class |
| 3 | ice    | a class |
| 5 | fridge | b class |
------------------------

正如我上面提到的,这类似于 contains 方法,但我将在 VB6 中使用这个 SQL 字符串。

有 a、b 和 c 类。每个项目(例如玻璃、冰箱等)都可以包含这些类中的任何一个,因此我的结果中不应存在 table2 的任何组合。

我想用 sql 查询来做到这一点,就像:

SELECT * 
  FROM area1 AS table1,
       (SELECT * FROM area2 WHERE blablabla..) AS table2
 WHERE table1.SNAME = table2.RNAME
   AND table1.sclass <> table2.rclass
4

1 回答 1

2

你需要一个left join

SELECT sid, sname, sclass
FROM table1
    LEFT JOIN table2
    ON table1.sname=table2.rname
    AND table1.sclass=table2.rclass
WHERE rid is null
于 2012-07-31T08:32:32.740 回答