2015-11-17 61 views
0

话MySQL的选择结果我有两个表所示:不包含从另一个选择

----- TABLE1 ----

1.out_name

2.out_name_log

3.out_name2

4.out_name2_log -

5.out_name3

6.out_name3_log

7.out_name4

8.out_name4_log


--- TABLE2 ----

1.name2 -

2.name3 -


我想从TABLE1中选择数据,如果它们不包含TABLE2中的任何单词。

我想要的结果显示:

out_name

out_name_log

out_name4

out_name4_log

+0

有没有范围正常化您的数据? – Strawberry

回答

1

如果你想选择一列不在另一个表中的数据。 您可以使用LEFT/RIGHT JOIN s。

SELECT TABLE1.* 
    FROM 
    TABLE1 LEFT JOIN TABLE2 ON TABLE1.`col1`=TABLE2.`col1` 
    WHERE TABLE2.`col1` IS NULL 

希望这会有所帮助。

+0

你有试过吗? –

+0

它工作吗? –

+0

按照你所说的答案,我得到表1中的所有数据而不是表2。 我在寻找的是第一个表中不包含第二个表中的任何单词的数据(例如:out_name_log不包含name2或name3,但out_name2包含name2)。 – Kondax

0

尝试使用动态sql查询来实现此目的。但是,如果TABLE2具有更多行数,这可能是一个不好的解决方案。

查询

set @query = null; 
select 
group_concat(distinct 
    concat(
     'col1 not like ''%',col1,'%'' and ' 
    ) separator ' ' 
) into @query 
from TABLE2 ; 

set @query = left(@query,length(@query) - 4); 
set @query = concat('select * from TABLE1 where ', @query); 

prepare stmt from @query; 
execute stmt; 
deallocate prepare stmt; 

SQL Fiddle