0

我有一个包含以下行的表设置:

orderfrom                               | Name
-------------------------------------------------------
ClearVision, Oakley, I-Deal Optics      | ClearVision
ClearVision                             | I-Deal Optics
ClearVision                             | Oakley

我想要一个查询,它将选择在“orderfrom”列中找不到名称”值的行。在这种情况下,它将返回第 2 行和第 3 行,但不返回第一行(因为“ClearVision”在 orderfrom 列中)。

这是我尝试过的:

SELECT * FROM `dist`
    JOIN `patientacct`
        ON `patientacct`.dist LIKE CONCAT('%', `dist`.name ,'%')
    INNER JOIN `treasure`
        ON `treasure`.`id` = `patientacct`.`id`
        WHERE (status = 'To Order' AND ****** ORDER BY `name` ASC);

**部分是我需要帮助的地方。我试过这个:

(( `dist`.name NOT LIKE CONCAT('%',`patientacct`.orderfrom,'%')) ))
4

2 回答 2

0

我不确定,但是这么简单的代码不是可以正常工作吗?

mysql> select * from stringComp;
+------------------------------------+---------------+
| value1                             | value2        |
+------------------------------------+---------------+
| ClearVision, Oakley, I-Deal Optics | ClearVision
  |
| ClearVision                        | I-Deal Optics |
| ClearVision                        | Oakley        |
| ClearVision, Oakley, I-Deal Optics | ClearVision   |
+------------------------------------+---------------+
4 rows in set (0.00 sec)

请注意,第 1 行的值 2 周围有额外的空格。

mysql> select * from stringComp where value1 not like concat('%',value2,'%');
+------------------------------------+---------------+
| value1                             | value2        |
+------------------------------------+---------------+
| ClearVision, Oakley, I-Deal Optics | ClearVision
  |
| ClearVision                        | I-Deal Optics |
| ClearVision                        | Oakley        |
+------------------------------------+---------------+
3 rows in set (0.00 sec)

这个简单的 SQL 比较列 value2 的内容以查看它们是否在列 value1 中,并返回它们不在的行。

所以,为了回答你的问题,我认为 where 子句中的这个小片段可以让你得到正确的结果:value1 not like concat('%',value2,'%')

编辑:我刚刚在您的查询中看到了额外的一行:我认为有一个额外的括号

(( `dist`.name NOT LIKE CONCAT('%',`patientacct`.orderfrom,'%')) ))

应该:

(( `dist`.name NOT LIKE CONCAT('%',`patientacct`.orderfrom,'%')))

编辑2:为什么你有所有这些括号呢?

SELECT 
    * 
FROM 
    `dist`
    JOIN `patientacct`
        ON `patientacct`.dist LIKE CONCAT('%', `dist`.name ,'%')
    INNER JOIN `treasure`
        ON `treasure`.`id` = `patientacct`.`id`
WHERE 
    status = 'To Order' 
    AND `dist`.name NOT LIKE CONCAT('%',`patientacct`.orderfrom,'%')
ORDER BY
    `name` ASC;
于 2012-06-27T06:03:29.837 回答
0

treasure 内部加入treasureid= patientacctid WHERE status = 'To Order' AND dist.name NOT LIKE CONCAT('%', patientacct.orderfrom,'%')

于 2012-07-18T22:47:38.197 回答