我在编写某个SQL查询时遇到了一些麻烦。我有一个钱包和一个平衡,我加入。查询现在看起来像这样:
SELECT
`balances`.`id` AS `id`,
FROM
`wallet`
LEFT JOIN `balances` ON
( `wallet`.`currency` = `balances`.`currency` )
WHERE
`balances`.`user_id` = '181'
由于where
子句,查询只返回匹配的记录。我希望得到钱包表中的所有记录,只有那些匹配where子句的余额...希望我解释得很好!
干杯!
使用子查询
SELECT w.*,t.*
FROM
wallet w
LEFT JOIN ( select * from balances where user_id = 181
) t ON w.currency =t.currency
问题是你在左连接表钱包上应用过滤器。
使用以下查询。
SELECT
`balances`.`id` AS `id`,
FROM
`wallet`
LEFT JOIN (select * from `balances` `user_id` = '181') ON
( `wallet`.`currency` = `balances`.`currency` );
问题并不完全清楚,但你几乎肯定需要在某种ID上额外加上join
条款。现在没有办法将钱包与其余额相匹配。假设平衡有例如。一个wallet_id
,你会想要像:
SELECT
`balances`.`id` AS `id`,
FROM
`wallet`
LEFT JOIN `balances` ON
(`wallet`.`id` = `balance`.`wallet_id` )
WHERE
`balances`.`user_id` = '181'
将条件移动到ON
子句。不要使用子查询!
SELECT w.*, b.id
FROM wallet w LEFT JOIN
balances b
ON w.currency = b.currency AND
b.user_id = 181;
笔记:
FROM
中的子查询可以阻碍优化器。LEFT JOIN
,则应该从第一个表中选择列。user_id
是一个数字,所以我删除了比较值周围的引号。