我有3个表offers
countries
和transactions
,而我正在尝试从特定国家和设备中提取优惠,我已经使用以下公式执行此操作:
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%';
此代码有效但现在我想在表ref
和users
transactions
的商品
这应该起作用的方式是:
transactions
。现在我能够完成3个步骤但不是第4个步骤。有关如何做到的任何帮助?
以下是表格的示例: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"
我希望这能解释一下我正在尝试做什么
答案 0 :(得分:1)
无法查看查询是如何用户特定的,但是要排除您可以使用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)
答案 1 :(得分:0)
您可以使用LEFT OUTER JOIN
来解决交易表
我在WHERE子句中添加了t.id IS NULL
。因此,您的结果只会显示没有交易的优惠。
SELECT *
FROM countries a
INNER JOIN offers b
ON a.id = b.offer_id
LEFT OUTER JOIN transactions t
ON t.id = b.offer_id
WHERE a.country = "US"
AND t.id IS NULL
关于你的问题,我仍然不清楚表格users
和& countries
已关联。
这是一个重要的细节,因为LEFT OUTER JOIN
应该只从这个特定用户那里获取交易。因此条件transactions.user = user.ref
也应该添加到连接中。
每当您向我解释此链接时,都会更新答案