我在应用中输入了一些静态文本keys
。我的应用程序还有一个可以使用的keys
表。我想编写一个查询,检查表中是否存在所有静态keys
。如果缺少某些内容,我想知道它们是keys
。
这是一个示例表...
+----------+
| column |
+----------+
| val1 |
+----------+
| val2 |
+----------+
| val3 |
+----------+
在这个例子中,我想检查表中不存在哪个静态值val1,val3,val4,val5
。如何编写查询来实现此目的?
答案 0 :(得分:3)
select key_name from keys_tab
where key_name not in
(select t2.key_name from keys_tab t2, other_tab t1
where t2.key_name = t1.key_name);
或
select key_name from keys_tab
where key_name not in
(select t2.key_name from keys_tab t2, other_tab t1
where t2.key_id = t1.key_id);
可以在子查询中使用distinct
select key_name from keys_tab
where key_name not in
(select distinct t2.key_name from keys_tab t2, other_tab t1
where t2.key_id = t1.key_id);
示例
mysql> select * from test1;
+----------+----------------------+---------------------+-------+
| col1 | col2 | mdate | myrow |
+----------+----------------------+---------------------+-------+
| col1 | 1/29/2011 9:59:47 AM | 2011-02-01 11:40:07 | NULL |
| val2 | NULL | 2011-02-04 22:09:11 | NULL |
| val4 | NULL | 2011-02-04 22:09:15 | NULL |
+----------+----------------------+---------------------+-------+
3 rows in set (0.00 sec)
mysql> select * from test2;
+------+------+
| col1 | col2 |
+------+------+
| val1 | val2 |
| val2 | val3 |
| val4 | val3 |
+------+------+
3 rows in set (0.00 sec)
mysql> select * from test2 where col1 not in (select t2.col1 from test2 t2, test1 t1 where t2.col1 = t1.col1);
+------+------+
| col1 | col2 |
+------+------+
| val1 | val2 |
+------+------+
1 row in set (0.00 sec)
mysql>
你需要的就是这个
CREATE TEMPORARY TABLE key_list(key_name varchar(100));
insert into key_list values ('val1'),('val2'),('val3'),('val4'),('val5');
select key_name from key_list where key_name not in (select distinct col1 from test1);
然后使用上面提到的临时表。我相信一定有更好的方法。
创建表时可以使用TEMPORARY关键字。 TEMPORARY表仅对当前连接可见,并在关闭连接时自动删除。