3

区域

view    state         region
EB1     TamilNadu     Chennai-North
EB2     AndhraPradesh     Guntur

国家

view    code    country   state
EB1     +91     India     TamilNadu
EB2     +91     India     AndhraPradesh
EB3     +91     India     Delhi
EB4     +91     India     Delhi

我想根据表中不存在的视图合并这些region表。

结果表必须如下所示:

view    code    country   state
EB3     +91     India     Delhi
EB4     +91     India     Delhi

(其中EB1EB2存在于region表中)

4

2 回答 2

1

你需要使用LEFT JOIN它。您需要 table 上不存在的值region。所以你需要使用WHERE r.view IS NULL. 你的整个查询应该是:

   SELECT c.*
     FROM country c
LEFT JOIN region r
       ON c.view = r.view
    WHERE r.view IS NULL

看到这个 SQLFiddle

更新

如果要创建一个名为的新表result并希望在该表中添加这些值,可以使用以下查询:

用于创建新表:

CREATE TABLE result
    (`view` varchar(3), `code` varchar(4)
     , `country` varchar(5), `state` varchar(13))
;

在该表上插入值:

INSERT INTO result (`view`, `code`, `country`, `state`)
      SELECT c.view, c.code, c.country, c.state
        FROM country c
   LEFT JOIN region r
          ON c.view = r.view
       WHERE r.view IS NULL

看到这个 SQLFiddle

于 2012-11-20T06:32:06.980 回答
0

如果要创建一个新表:

CREATE TABLE new_table (
  SELECT * FROM country
  WHERE view NOT IN (
    SELECT view FROM region
  )
)

或者,如果您只想创建一个视图,请使用相同的查询,替换CREATE TABLEby CREATE VIEW AS

于 2012-11-20T06:46:43.233 回答