繁体   English   中英

如何选择第二个表中没有值的行

[英]How to select rows that don't have value in a second table

基本上我有一个主表(帐户)和一个元表(accounts_meta)...元表如下所示:

id | account_id | meta_key | meta_value

我想要做的只是在accounts_meta表中选择没有'referrer_paid'作为行的帐户...

这是我到目前为止的代码......

SELECT a.* FROM accounts AS a
    LEFT JOIN accounts_meta AS am ON a.id = am.account_id AND am.meta_key != 'referrer_paid'
    WHERE a.account_referrer != ''
    GROUP BY a.id

希望我有意义。 我究竟做错了什么?

SELECT * 
  FROM accounts 
 WHERE id NOT IN ( select DISTINCT account_id 
                     from `account_meta_table` 
                    where meta_key != 'referrer_paid'
                  );

来自@lexu的微小变化:

\n 选择 * \n   来自帐户 \n  WHERE id NOT IN(选择account_id \n                      来自`account_meta_table` \n                     其中meta_key ='referrer_paid'\n                   );\n
SELECT a.* FROM accounts AS a
LEFT JOIN accounts_meta AS am ON a.id = am.account_id AND am.meta_key = 'referrer_paid'
WHERE a.account_referrer != ''
  AND am.account_id IS NULL

你不需要group by,因为left-join-is-null不会产生重复的帐户行

编辑: duh,将am.meta_key != 'referrer_paid'改为am.meta_key != 'referrer_paid'改为am.meta_key = 'referrer_paid'

这就是你想要的。 如果连接的行不匹配,则返回NULL,并且只接受NULL行

SELECT a。* FROM accounts as a LEFT JOIN accounts_meta AS am ON a.id = am.account_id AND am.meta_key!='referrer_paid'WHERE ISNULL(am.account_referrer)GROUP BY a.id

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM