没有任何关系地查询两个表

pou*_*uya 3 mysql sql

假设我们有两个表usersproducts

table users有一个accountBalance列

users模式:

userId  accountBalance .........
1           500        .........
2           45000      .........
3           4238827    .........
.               .      .........
.               .      .........
.               .      .........
Run Code Online (Sandbox Code Playgroud)

products有一个价格列

products模式:

productId   price      .........
1           40000      .........
2           55000      .........
3           90000      .........
.               .      .........
.               .      .........
.               .      .........
Run Code Online (Sandbox Code Playgroud)

这些表没有任何关系,所以我不能通过公共密钥加入它们.我想知道的是找出每个用户可以购买的产品,并将其格式化为以下预期结果:

expected result方法是:

userId  productIdsUserAffordToBuy
1       NUll
2       1*2
3       1*2*3
.       .
.       .
.       .
Run Code Online (Sandbox Code Playgroud)

Mic*_*ski 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
Run Code Online (Sandbox Code Playgroud)


sel*_*sel 5

select userid,accountbalance,group_concat(productid) as productaffordtobuy
from users cross join products 
where price<=accountbalance
group by userid
Run Code Online (Sandbox Code Playgroud)

SQL FIDDLE HERE>