我有 3 个表优惠
国家
和交易
,我想要做的是从特定国家/地区和设备提取优惠,我已经用这个公式做到了:
SELECT
*
FROM countries a
INNER JOIN offers b ON a.id = b.offer_id
WHERE a.country = "US"
AND b.device = 'all'
UNION
SELECT
*
FROM countries a
INNER JOIN offers b ON a.id = b.offer_id
WHERE a.country = "US"
AND b.device LIKE 'iphone%';
此代码有效,但现在我想排除表 users
和 transactions
之间具有相同 ref
的报价
这应该工作的方式是:
- 来自 X 国家/地区的用户在 Y 设备上输入。
- 用户根据所在国家/地区和设备选择优惠。
- 优惠是通过回发到
交易
来注册的。 - 用户进入主页后不再看到他已经完成的报价。
现在我能够完成前 3 个步骤,但无法完成第四步。关于如何做到这一点有任何帮助吗?
以下是表格示例:SQL Fiddle
提前致谢
编辑
如果我把所有这些都放在文字上会是这样的:
Select all from *offers* where the **offer_id** match with **ID** from *countries* with the **country** "US" and also from *offers* have the **device** "iPhone" now exclude from *transactions* the offers with the **user** = "xxxxx"
我希望这能解释一下我想要做的事情
最佳答案
无法查看查询如何特定于用户,但要排除交易中引用的报价,您可以使用 NOT EXISTS
SELECT *
FROM countries a
INNER JOIN offers b ON a.id=b.offer_id
WHERE a.country="US" AND b.device = 'all'
AND NOT EXISTS (SELECT 1 FROM transactions t WHERE t.offer = b.offer_Id)
关于php - 如何排除三个不同表的查询结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46091940/