为简洁起见,假设我有一个如下所示的表格:
item_name item_location item_price
PROMO_A local 5
B local 7
PROMO_A global 8
现在,我正在做的是选择 item_location 为“本地”或item_name
包含单词PROMO
但item_location
不是“本地”的所有记录。这在我的 SQL 查询中看起来很简单:
SELECT * FROM mytable WHERE item_location='local' OR (item_name like 'PROMO%' AND item_location != 'local');
现在,它可能会发生,就像我在上面设置的示例数据一样,我会得到两个相同item_name
的 ',所以我想知道如何修复这个查询,以便不添加后一个查询?我可以通过编写一个 PHP 程序来解决这个问题,该程序将遍历记录并删除重复项(我需要删除具有 item_location=='global' 的重复项(具有相同 item_name 的那些))但我想知道这是否可以仅使用 SQL 完成?我正在考虑制作上述查询的临时表,然后查询不同的 item_name 记录,但在这种情况下,我将如何删除 item_location 为“全局”的记录?
无论如何,任何帮助表示赞赏。
edit2:我设法使用以下查询来解决这个问题:
SELECT * FROM mytable WHERE item_location = 'local'
联盟
SELECT * FROM mytable WHERE item_name LIKE 'PROMO%' AND item_name NOT IN
(SELECT item_name from mytable WHERE item_location = 'local' )
这个 sql fiddle 链接在这里。
现在,我相信这可以以更好的方式处理,所以如果有人有更好的方法,我想听听你的想法。