MySQL不像查询

时间:2017-07-25 17:46:10

标签: mysql sql

我想将table1table2与指定列进行比较,并希望table1返回不匹配的记录

当我以'like'使用其他方式并返回匹配结果时效果很好。

但我真的希望获得无与伦比的记录。

以下是示例表     

    table 1
    ----------------------------------
    No.     DesignID
    1       c12345
    2       c16
    3       c20   

    Table 2
    ----------------------
    No.    DesignOption
    1      Online-c12345-print
    2      Online-c16-proof

 $db->fetchallColumn(SELECT distinct(a.DesignID) FROM table1 as a, table2 as b where b.DesignOption 
    not like CONCAT('%', a.DesignID, '%'));

加入示例

$db->fetchallColumn(SELECT distinct(a.DesignID) FROM table1 as a inner join 
table2 as b on b.DesignOption not like CONCAT('%', a.DesignID, '%'));

预期结果:c20

相反,我从table1获取所有记录

任何帮助都可以得到赞赏。

3 个答案:

答案 0 :(得分:3)

假设您的查询有效,只需使用外部联接:

SELECT DISTINCT a.DesignID
FROM table1 a left join 
     table2 b 
     ON b.DesignOption like CONCAT('%', a.DesignID, '%')
WHERE b.DesignOption IS NULL;

请注意DISTINCT不是函数。 SQL运算符是SELECT DISTINCT。不要使用括号 - 除非你有理由这样做。

答案 1 :(得分:1)

你可以这样试试

SELECT DISTINCT b.DesignID
FROM table2 a RIGHT JOIN 
table1 b 
ON a.DesignOption NOT LIKE CONCAT('%', b.DesignID, '%')
WHERE a.DesignOption IS NOT NULL;

希望它能运作

答案 2 :(得分:0)

但是如果你想看到子查询的方法。

Select DesignID From Table1
Where DesignID not in (SELECT a.DesignID 
FROM table1 as a inner join 
table2 as b on b.DesignOption like CONCAT('%', a.DesignID, '%'))