php - 如何比较两个选择?

标签 php mysql sql

我有两个表:

enter image description here

  $email = a@a
  SELECT * FROM users WHERE email<>'$email' AND channel <> '( SELECT * FROM inscricoes WHERE email ='$email')' ORDER BY RAND();

如何得到这个结果?

d@d    |    ddddd

最佳答案

我会使用反连接模式

SELECT u.email
     , u.channel 
  FROM users u

    -- anti-join, exclude rows with matching channel
  LEFT
  JOIN inscricoes i
    ON i.email = 'a@a' 
   AND i.channel = u.channel
 WHERE i.email IS NULL 

   AND u.email <> 'a@a'
 ORDER BY u.channel

就是说,从 users 获取所有行(user = 'a@a' 的行除外)

连同这些行,从 inscricoes 中获取任何匹配的行。

扭曲是 WHERE 子句中的条件。

我们保证任何具有匹配项的行都将具有 i.channel 的非 NULL 值(因为 NULL 值不满足 ON 子句中的相等条件)。因此,如果我们排除 i.channel 中具有非 NULL 值的行,我们将留下没有匹配项的行。


可以使用 NOT EXISTS(相关子查询) 模式获得等效结果

SELECT u.email
     , u.channel 
  FROM users u
 WHERE u.email <> 'a@a'
   AND NOT EXISTS 
       ( SELECT 1 
           FROM inscricoes i
          WHERE i.email = 'a@a' 
            AND i.channel = u.channel
       )
 ORDER BY u.channel 

关于php - 如何比较两个选择?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49618615/

相关文章:

mysql - 如何衡量多少 mysql 连接带来最佳性能?

php - 来自 SQL 的值数组,显示哪些存在,哪些不存在

mysql - 优化这个双左连接查询?

php - 如何在一个div下打印10次<li>?

php - 为什么在定义 MySQL 查询后就停止了?

php - 在 PHP 7.4 中获取类型化属性的类型

MySQL 5.1.7 两个表的条​​件联接从第二个表中按日期选择顶部记录以及第一个表中的所有记录

python - Heroku dynos 在部署后立即崩溃 : DATABASE undefined

php - Else If block 和大括号

php - Symfony2 中应该如何包装 3rd 方包?