我目前正在尝试使用具有未知值的LEFT JOIN从2个表中获取数据。
我尝试使用LEFT JOIN,但是没有用。
这是我的代码示例:
SELECT
cc.shid,
cc.user,
ts.type,
sum(cc.qty1) + sum(cc.qty2) as qty_tot,
COUNT(cc.id) as nb
FROM
content_c cc
LEFT JOIN
(SELECT
s.shid,
s.type
FROM
tab_s s
LIMIT 1
) as ts ON ts.shid = cc.shid
WHERE
cc.time_i like '2019-01%'
GROUP BY
cc.user,
ts.type
使用该查询将永远无法进行:无论cc.shid如何,ts都将包含tab_s的首次出现。我想知道是否有办法做到这一点:
LEFT JOIN
(SELECT
s.shid,
s.type
FROM
tab_s s
WHERE
s.shid = cc.shid
LIMIT 1
) as ts ON ts.shid = cc.shid
有什么主意吗?在SQL或类似的东西中有指针概念吗?就像我可以使用&cc.shid或@ cc.shid吗?
请注意,请执行以下操作:
LEFT JOIN tab_s ts ON ts.shid = cc.shid
我将要求我花费1分钟以上的时间来显示结果。而且我无法在tab_s.shid和cc.shid中设置索引,因为它多次出现。
请记住,content_c可以多次出现cc.shid,这就是为什么我只需要获取第一个结果(LIMIT 1)的原因。这很重要。
答案 0 :(得分:1)
使用相关子查询:
SELECT cc.shid, cc.user, cc.type,
SUM(cc.qty1) + SUM(cc.qty2) as qty_tot,
COUNT(cc.id) as nb
FROM (SELECT cc.*,
(SELECT s.type
FROM tab_s s
WHERE ts.shid = cc.shid
LIMIT 1
) as type
FROM content_c cc
) cc
WHERE cc.time_i >= '2019-01-01' AND
cc.time_i < '2019-02-01'
GROUP BY cc.shid, cc.user, cc.type;
注意:
LIMIT
的{{1}}是可疑的。为什么基础表中会有重复项?ORDER BY
应该在GROUP BY
中包括所有未聚合的列。答案 1 :(得分:0)
如问题评论中所述,您可以尝试使用此脚本,看看它是否满足您的要求?这将在“ content_c”表中为每个ID返回一行,并具有GROUP BY影响。
SELECT
cc.shid,
cc.user,
ts.type,
sum(cc.qty1) + sum(cc.qty2) as qty_tot,
COUNT(cc.id) as nb
FROM content_c cc
LEFT JOIN
(
SELECT DISTINCT s.shid, s.type FROM tab_s s
) AS ts ON ts.shid = cc.shid
WHERE cc.time_i like '2019-01%'
GROUP BY cc.shid,cc.user,ts.type