php - 如何排除三个不同表的查询结果?

标签 php mysql sql database join

我有 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%';

此代码有效,但现在我想排除表 userstransactions 之间具有相同 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/

相关文章:

mysql - 删除多对多关系中的数据或状态 = 不活动

sql - 在 Oracle 上与 INSERT INTO 结合使用时,有效的 GROUP BY 查询不起作用

php - 解析错误: syntax error, unexpected ',' not seeing the issue [duplicate]

php - 带有 2 个按钮的 Jquery.post 提交表单

php - 从 PHP cURL 响应中获取 header

php - 无法将 Summernote 值存储到数据库中,它返回 [object Object]

php - 如何将数据库表添加到自定义表单并在网页中显示结果

php - 如何使用php重新排列以下数据?

mysql - 如何检索存储在多行中的 "dynamic"属性作为正常记录?

php - Laravel - 如何从 Guzzle 保存二进制文件