您的位置:首页 > 数据库

sql遇到的坑总结

2018-03-23 13:08 155 查看
1. 今天在做left join关联查询时候,有如下sql, 我想拉出app列表,并且要显示出当前用户在每个app里面声望值,后来发现查询为空,很疑惑即使右表没有符合条件的数据,left join是会把左表的数据全部返回的啊,为什么为空呢,找了半天原因就在kmta.account_address = #{accountAddress}这里,这个sql在kaa.effective=1之上部分执行是会有结果的,where里面的条件是对整个left join结果之后做了条件限制,#{accountAddress}在kmta里面不存在,那么在left join之后的结果也是不存在,加上条件必然为空了。SELECT
kaa.app_icon appIcon,
kaa.app_name appName,
cast(score / 10 AS DECIMAL(2, 1)) myScore,
kaa.app_describe appDescribe,
kaa.download,
kaa.appPackageName,
kaa.iosPackageName,
kaa.app_intro appIntro,
kaa.app_img appImg
FROM
kyc_app_auth kaa
LEFT JOIN kyc_mock_transaction_app kmta ON kaa.id = kmta.app_id
WHERE
kaa.effective = 1
AND kmta.account_address = #{accountAddress}做了如下修改,把accountAddress的限制放在内部:
SELECT
  kaa.app_icon appIcon,
  kaa.app_name appName,
  cast(score / 10 AS DECIMAL(2, 1)) myScore,
  kaa.app_describe appDescribe,
  kaa.download,
  kaa.appPackageName,
  kaa.iosPackageName,
  kaa.app_intro appIntro,
  kaa.app_img appImg
FROM
  kyc_app_auth kaa
LEFT JOIN (
  SELECT
    *
  FROM
    kyc_mock_transaction_app kmta
  WHERE
    kmta.account_address = #{accountAddress})
    km ON kaa.id = km.app_id
  WHERE
    kaa.effective = 1
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: