作者 主題: 請問關於SQL資料比對的問題  (閱讀 7683 次)

0 會員 與 1 訪客 正在閱讀本文。

shane0711

  • 懷疑的國中生
  • **
  • 文章數: 32
    • 檢視個人資料
請問關於SQL資料比對的問題
« 於: 2007-11-26 12:31 »
請問各位大大,我有兩個Table
TableA,TableB

TableA裡面有個欄位是id,TableB裡面也有個欄位是id

請問我要如何下語法可以去比對TableA和TableB重付的ID呢?

civilhunter

  • 可愛的小學生
  • *
  • 文章數: 27
    • 檢視個人資料
回覆: 請問關於SQL資料比對的問題
« 回覆 #1 於: 2007-11-26 12:50 »
(A) 利用EXISTS

SELECT A.id
FROM TableA A
WHERE EXISTS
         ( SELECT 'x'
           FROM TableB B
           WHERE B.id = A.id)

-----------------------------------------

(B) 利用 IN

SELECT A.id
FROM TableA A
WHERE A.id IN ( SELECT B.id
                        FROM TableB B )

luchinwei

  • 可愛的小學生
  • *
  • 文章數: 21
    • 檢視個人資料
回覆: 請問關於SQL資料比對的問題
« 回覆 #2 於: 2007-11-27 12:02 »
再補一個 (C)

用 join:

SELECT * FROM tableA INNER JOIN tableB USING(id);


要用 USING 的前提是兩個 table 都擁有相同的 column name(此例中是 id),而且你打算對這兩個同名的 column 進行 "=" 比對。

« 上次編輯: 2007-11-27 12:04 由 luchinwei »

micmic3

  • 俺是博士!
  • *****
  • 文章數: 1693
    • 檢視個人資料
回覆: 請問關於SQL資料比對的問題
« 回覆 #3 於: 2007-11-27 12:20 »
再補一個 (C)

用 join:

SELECT * FROM tableA INNER JOIN tableB USING(id);


要用 USING 的前提是兩個 table 都擁有相同的 column name(此例中是 id),而且你打算對這兩個同名的 column 進行 "=" 比對。



SELECT * FROM tableA INNER JOIN tableB USING(id) where tableB.id is null 找出不 B裡的
SELECT * FROM tableA INNER JOIN tableB USING(id) where tableB.id is not  null 就自己推一下

luchinwei

  • 可愛的小學生
  • *
  • 文章數: 21
    • 檢視個人資料
回覆: 請問關於SQL資料比對的問題
« 回覆 #4 於: 2007-11-28 20:50 »
SELECT * FROM tableA INNER JOIN tableB USING(id) where tableB.id is null 找出不 B裡的
SELECT * FROM tableA INNER JOIN tableB USING(id) where tableB.id is not  null 就自己推一下

前幾天看到就覺得怪怪的, 現在又看一次還是覺得怪怪的

我不太懂你的意思

你是要找出 tableA 和 tableB 的差集嗎

怎麼會是用 INNER JOIN?

應該要用 OUTER JOIN 吧?

micmic3

  • 俺是博士!
  • *****
  • 文章數: 1693
    • 檢視個人資料
回覆: 請問關於SQL資料比對的問題
« 回覆 #5 於: 2007-11-29 09:28 »

SELECT * FROM tableA INNER JOIN tableB USING(id) where tableB.id is null 找出不 B裡的
SELECT * FROM tableA INNER JOIN tableB USING(id) where tableB.id is not  null 就自己推一下
打錯一時看錯
應該是
SELECT * FROM tableA as TB LEFT JOIN tableB  as TB1 on ( TB.id=TB1.id)
where TB1.id is null 找出不在B裡的
SELECT * FROM tableA as TB LEFT JOIN tableB  as TB1 on ( TB.id=TB1.id)
where TB1.id is null 就自己推一下