2012-02-08 105 views
0

我想從兩個MySql表中選擇記錄。我希望第一張表中的所有記錄(不包括按日期的特定記錄)從第二張表中排除。例如:SQL查詢從一個表中獲取所有記錄,除了特定記錄,按日期,從另一個表

表1T1idfirstNameLastName
表2idT1idhoursratedate

T1id是這兩個表之間的鏈接,因此當表的連接我有T1idfirstNamelastName,hours,rate, date

假設有一個記錄表2date of 2012-02-08。隨着一個查詢,我需要從表1 選擇的所有記錄,不包括表2是擁有2012-02-08日期的記錄。

我已經嘗試了JOINS和UNION的一些變體,但是我得到所有記錄,一堆重複記錄或一個記錄(即Table2日期)。我很抱歉,但是我沒有特定的代碼片段,因爲沒有任何東西適用於我。

回答

1

很多次,這通常是用NOT EXISTS子查詢完成的,但子查詢可以是大表中的大性能命中......但是,通過執行LEFT JOIN並尋找N ULL是在本質上相同的結果

select 
     t1.* 
    from 
     table1 t1 
     left join table2 t2 
      on t1.t2.t1id 
      AND t2.date = '2012-02-08' 
    where 
     t2.t1id IS NULL 
+0

我剛剛在我的查詢和中提琴中使用了你的建議,它工作。通過具有「及日期」日Thnx – user175328 2012-02-08 12:53:01

+0

@ user175328,很高興它的工作... - 我真的試圖包含在你的建議都分開,但沒想到把它放在一起(即LEFT JOIN和日期,以及IS NULL)與加入素質要求在特定的水平,而不是整個「WHERE」條款有關......絕招我已經學會在左邊好半天回JOIN/NULL測試......特別是如果工作表符合MIL記錄比子 - 爲每個被測試的行選擇。 – DRapp 2012-02-08 12:59:28

1

使用INNER JOIN如果你確信T1id存在兩個表中:

SELECT a.T1id, 
     a.FirstName, 
     a.LastName, 
     b.hours, 
     b.rate, 
     b.date 
FROM table1 a INNER JOIN table2 b 
     ON a.T1id = b.T1id 
WHERE b.date <> DATE('2012-02-08') 

,但如果你想從表1 (現有的或表2中不存在),讓所有T1id使用LEFT JOIN

SELECT a.T1id, 
     a.FirstName, 
     a.LastName, 
     b.hours, 
     b.rate, 
     b.date 
FROM table1 a LEFT JOIN table2 b 
     ON a.T1id = b.T1id 
WHERE b.date <> DATE('2012-02-08') 
+0

日Thnx的快速反應。不幸的是,這兩個建議都導致Table2中的所有記錄都沒有2012-02-08的日期。我試圖從Table1中獲取所有記錄,減去Table2 2012-02-08記錄。 – user175328 2012-02-08 12:45:01

相關問題