假设我们有两个表users
和products
表users
有一个accountBalance列
表users
架构:
userId accountBalance .........
1 500 .........
2 45000 .........
3 4238827 .........
. . .........
. . .........
. . .........
表products
有一个价格列
表products
架构:
productId price .........
1 40000 .........
2 55000 .........
3 90000 .........
. . .........
. . .........
. . .........
这些表没有任何关系,因此我无法通过公共密钥加入它们。我想知道的是找出每个用户可以购买的产品,并将其格式化为以下预期结果:
expected result
是:
userId productIdsUserAffordToBuy
1 NUll
2 1*2
3 1*2*3
. .
. .
. .
答案 0 :(得分:6)
使用GROUP_CONCAT()
在单个列中创建列表并加入条件accountBalance >= price
,您实际上可以执行LEFT JOIN
(必须为用户返回NULL
谁买不起任何东西,而不是省略一行):
SELECT
userId,
GROUP_CONCAT(productId) AS productIdUserAffordToBuy
FROM
users
LEFT JOIN products ON users.accountBalance >= products.price
GROUP BY userId
答案 1 :(得分:5)
select userid,accountbalance,group_concat(productid) as productaffordtobuy
from users cross join products
where price<=accountbalance
group by userid
答案 2 :(得分:1)
Cross Join
或id
有点棘手
select userid,accountbalance,productid as productaffordtobuy
from users
cross join products
where price<=accountbalance
group by userid