2012-07-12 35 views
0

我有一段代碼負責根據某個字段是否出現在列表中來「過濾」某些記錄。MySQL將列表中的任何值與另一個列表中的任何值進行匹配

目前SELCT * FROM table1 ... AND value IN (8, 6, 4, 2, 9, 1, 3, 5, 7) ...

隨着table1的結構:

CREATE TABLE IF NOT EXISTS `table1` (
    `uniqueid` varchar(32) NOT NULL, 
    `value` int(11) DEFAULT NULL, 
    ... 
    PRIMARY KEY (`uniqueid`) 
) 

現在我必須存儲在一個單獨的表value,有可能是在表中不止一個「值」。

新table1的結構:

CREATE TABLE IF NOT EXISTS `table1` (
    `uniqueid` varchar(32) NOT NULL, 
    ... 
    PRIMARY KEY (`uniqueid`) 
) 

新表2結構

CREATE TABLE IF NOT EXISTS `table2` (
    `id` int(11) NOT NULL, 
    `uniqueid` varchar(32) NOT NULL, 
    `value` int(11) DEFAULT NULL, 
    ... 
    PRIMARY KEY (`id`) 
) 

你的想法!

我的問題是如何檢查表2中uniqueid的任何記錄是否在第一個示例中給出的列表中。

我考慮使用某種COUNT子查詢,但我不確定。我試過:

SELECT * FROM table1, table2 
      WHERE table1.uniqueid = table2.uniqueid 
      AND (SELECT COUNT(id) FROM table1, table2 
         WHERE table2.uniqueid = table1.uniqueid) > 0 
      AND table2.value IN (8, 6, ... 

但它沒有工作,我不喜歡這種方法,感覺非常混亂。

任何幫助表示讚賞。

+0

您能否提供所需的結果集? – 2012-07-12 14:06:56

回答

0

如果您想查找2個表中存在的值,請執行INNER JOIN

SELECT UniqueID 
    FROM Table1 t1 
    INNER JOIN Table2 t2 
    ON t1.UniqueID = t2.UniqueID 
    WHERE (YourCritiera); 
+0

我不認爲這有效。表2可能包含'uniqueid'的幾個記錄,每個記錄具有不同的'value'。我需要知道'IN'列表中的任何值是否與表2 – Josh 2012-07-12 14:02:49

+0

中'value'的任何值匹配,似乎是另一個使用此連接的建議,也許我的理解不正確。讓我實際嘗試一下。 – Josh 2012-07-12 14:10:42

+0

我的歉意,它確實工作。我不明白JOIN的邏輯。 – Josh 2012-07-12 14:15:54

相關問題