MySQL将列表中的任何值与另一个列表中的任何值进行匹配

时间:2012-07-12 13:56:21

标签: mysql filter subquery

我有大量代码可以根据列表中是否出现某个字段来“过滤”某些记录。

目前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`)
)

新的table2结构

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

你明白了!

我的问题是如何检查table 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, ...

但它不工作,我不喜欢这种方法,感觉非常凌乱。

任何帮助表示感谢。

1 个答案:

答案 0 :(得分:0)

如果要查找2个表中存在的值,请实现INNER JOIN

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