2010-07-29 76 views
0

我有一个情况,我有一个表中存储在两个字段中的文件名。这些字段被称为file1和file2。MySQL的条件查询

file1总是存在。对于某些行,file2可能不存在。

我想编写一个查询,使我只能从数据库中获取文件的某个扩展名。

对于我使用例如

...WHERE file1 LIKE '%jpg%' 

但在这里我不能使用AND file2 LIKE '%jpg%'因为文件2可能是空的,这是确定的。

那么我该怎么做才能使LIKE条件只适用于该字段不为空的情况?

+3

注意,file1中LIKE '%JPG%' 将匹配 'hbjpgx.gif'。除非你绝对肯定不会发生这种情况,否则你可能想让它变成'%.jpg' – Kendrick 2010-07-29 18:07:12

回答

2

尝试AND (file2 is NULL or file2 LIKE %jpg%)

+1

看起来你错过了'%jpg%':)附近的引号:) – 2010-07-29 18:21:12

0

只能使用OR file2 LIKE '%jpg%'

+0

不会。即使它有错误的扩展名,这会让他得到File1。 – AllenG 2010-07-29 18:03:39

+0

这两个文件应该有相同的扩展名。使用OR会以一个文件名返回扩展名不是jpg的行。 – psyb0rg 2010-07-29 18:04:21

2

利用括号说明。

WHERE file1 LIKE '%jpg%' AND (file2 LIKE '%jpg%' OR file2 is NULL OR file2 = '') 

,或者你从文件2

2

需要的任何其他条件试试这个:

AND (file2 LIKE '%jpg%' OR file2 IS NULL (or file2 = '' depending on what your empty value is)) 
2
SELECT * 
FROM files 
WHERE file1 LIKE '%jpg' AND 
     (file2 LIKE '%jpg' OR file2 IS NULL); 

测试用例:

CREATE TABLE files (file1 varchar(20), file2 varchar(20)); 

INSERT INTO files VALUES ('pic1.jpg', NULL); 
INSERT INTO files VALUES ('pic2.png', NULL); 
INSERT INTO files VALUES ('pic3.jpg', 'otherpic.jpg'); 
INSERT INTO files VALUES ('pic4.png', 'nopic.jpg'); 
INSERT INTO files VALUES ('pic5.bmp', 'otherpic.gif'); 

返回:

+----------+--------------+ 
| file1 | file2  | 
+----------+--------------+ 
| pic1.jpg | NULL   | 
| pic3.jpg | otherpic.jpg | 
+----------+--------------+ 
2 rows in set (0.00 sec)