2013-04-08 85 views
0

我在我的數據庫中有兩個MySQL表,具有相同的結構,SOURCE和TARGET。爲什麼SELECT ... IN語句不起作用?

我用來加入這兩者的外鍵是'email'列。

基本上,TARGET只包含經過驗證的電子郵件列表,它是SOURCE中電子郵件的子集,該列表還包含以電子郵件爲關鍵字的其他地址數據。我需要從源文件中提取具有有效電子郵件的所有記錄。簡單,呃?似乎無法獲得MySQL做到這一點...

這裏是我的查詢:

SELECT 
    email, 
    firstname, 
    lastname, 
    address, 
    city, 
    state, 
    zip, 
    phone 
FROM Source 
WHERE email IN 
    (SELECT email FROM Target); 

當我這樣做,我得到零條記錄;但我知道SELECT email FROM Target的作品,我知道SOURCE包含電子郵件。

我試圖在MySQL Workbench 5.2.34中執行此操作,其中查詢運行時沒有錯誤...但沒有輸出。 (我知道服務器正在運行,等等)

+0

你可以發佈目標和源表的示例電子郵件數據? – 2013-04-08 02:09:17

回答

1

你的代碼工作得很好。在沒有看到任何數據的情況下,不可能說出是什麼原因造成了這個問題,但可能還有其他問題沒有向我們展示。

工作小提琴:

http://sqlfiddle.com/#!2/7d505/1

的架構:

Create table Source(
    email varchar(30), 
    firstname varchar(30), 
    lastname varchar(30), 
    address varchar(30) 
); 

Create table Target(
    email varchar(30) 
); 


Insert into Source (email, firstname, lastname, address) VALUES('[email protected]', 'jack', 'smith', '123 pine lane'); 
Insert into Source (email, firstname, lastname, address) VALUES('[email protected]', 'fake', 'name', '456 pine street'); 

Insert into Target (email) VALUES('[email protected]'); 

查詢:

SELECT 
    email, 
    firstname, 
    lastname, 
    address 
FROM Source 
WHERE email IN 
    (SELECT email FROM Target); 

結果:

[email protected] jack smith 123 pine lane 
+0

使用'IN'與OP帖子有什麼不同? – 2013-04-08 02:07:37

+0

@IswantoSan老實說,從這個意義上說,我認爲這只是更多的'最佳做法'/個人喜好去JOIN。 – 2013-04-08 02:08:23

+0

更好地在表中添加前綴列以避免歧義。 – Kermit 2013-04-08 02:09:31

0

我其實已經想通了......對於這篇文章的紅色鯡魚抱歉:問題是用於創建TARGET表的導入文件中多餘的換行符(\ n)字符。 MySQL中的TRIM函數沒有做任何事情,但這就是爲什麼連接不起作用。一旦我在導入文件中刪除多餘的換行符,並重新導入表格,瞧!代碼工作...