2011-06-23 95 views
0

我想知道的是有可能这样做,如果我有4个号码如下MySQL查询返回“不存在价值”

1,2,3,4

在我的数据库中有如下

1,2,3,5,6,7

数据存在如何我可以查询数据库,并返回在4 1查询

请告知

+1

呃,'选择4 FROM [TableName]'?! – Widor

+1

这可能是你需要的:http://stackoverflow.com/questions/2886797/select-back-things-that-dont-exist – Mike

+0

谢谢你Mike。 – Wara

回答

1
CREATE TABLE `example` (
    `id` int(10) unsigned NOT NULL AUTO_INCREMENT, 
    PRIMARY KEY (`id`) 
) ENGINE=InnoDB; 

INSERT INTO example VALUES (1),(2),(3),(5),(6),(7); 

SELECT t2.id FROM example AS t1 
RIGHT JOIN (
    SELECT 1 AS id UNION 
    SELECT 2 AS id UNION 
    SELECT 3 AS id UNION 
    SELECT 4 AS id 
) AS t2 
ON t1.id = t2.id 
WHERE t1.id IS NULL; 

+----+ 
| id | 
+----+ 
| 4 | 
+----+ 

或者使用临时表:

CREATE TEMPORARY TABLE `tmp` (
    `id` int(11) DEFAULT NULL 
) ENGINE=InnoDB; 

INSERT INTO tmp VALUES (4); 

SELECT t2.id FROM example AS t1 
RIGHT JOIN tmp AS t2 
ON t1.id = t2.id 
WHERE t1.id IS NULL; 

要看到发生了什么,转了一下周围的东西:

SELECT t1.id, t2.id FROM example AS t1 
RIGHT JOIN (
    SELECT 1 AS id UNION 
    SELECT 2 AS id UNION 
    SELECT 3 AS id UNION 
    SELECT 4 AS id 
) AS t2 
ON t1.id = t2.id; 

+------+----+ 
| id | id | 
+------+----+ 
| 1 | 1 | 
| 2 | 2 | 
| 3 | 3 | 
| NULL | 4 | 
+------+----+ 
+0

每次我想要使用此查询时,是否需要创建表? – Wara

+0

“示例”表?不,这只是为了让你了解它是如何工作的。 “示例”表只是您真实表格的替代品。 – Mike

+0

再次感谢您的麦克你的不错的解释 – Wara

1
SELECT id FROM 
    (SELECT 1 AS id UNION 
    SELECT 2 UNION 
    SELECT 3 UNION 
    SELECT 4 
) AS TBL1 
WHERE id NOT IN (SELECT id FROM thetable) 
+0

@ypercube谢谢... – tamilnad