2012-07-12 65 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

相关问题