4

假设我们有两张桌子usersproducts

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
.       .
.       .
.       .
4

3 回答 3

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
于 2012-08-15T01:33:44.767 回答
5
select userid,accountbalance,group_concat(productid) as productaffordtobuy
from users cross join products 
where price<=accountbalance
group by userid

SQL 小提琴在这里>

于 2012-08-15T01:34:09.707 回答
1

Cross Join没有任何关系或id有点棘手

select userid,accountbalance,productid as productaffordtobuy
from users 
cross join products 
where price<=accountbalance
group by userid
于 2015-03-25T03:50:38.820 回答