[英]MySql query joining two table and get combine two row to be one
I have table, 我有桌子
tbl_user tbl_user
id uniqid name
1 123456 AAAA
2 333333 BBBB
tbl_transaction tbl_transaction
id userid code value
1 1 2202 500000
2 1 2204 700000
and How get the result tobe like this 以及如何获得这样的结果
id uniqueid name code1 value1 code2 value2
1 123456 AAAA 2202 500000 2204 700000
in my query i just know to use join this my code 在我的查询中,我只是知道要使用加入我的代码
SELECT x.id, x.uniqueid, x.name, y.value
FROM tbl_user x
LEFT JOIN tbl_transaction y
ON y.userid = x.id
One way to do it, grouping up the possible values into string using GROUP_CONCAT, and then using SUBSTRING_INDEX to get each value (if it exists). 一种方法是,使用GROUP_CONCAT将可能的值分组为字符串,然后使用SUBSTRING_INDEX来获取每个值(如果存在)。
SELECT x.id,
x.uniqueid,
x.name,
IF(COUNT(y.id) >= 1, SUBSTRING_INDEX(GROUP_CONCAT(y.code ORDER BY y.code), ',', 1), NULL) AS code1,
IF(COUNT(y.id) >= 1, SUBSTRING_INDEX(GROUP_CONCAT(y.value ORDER BY y.code), ',', 1), NULL) AS value1,
IF(COUNT(y.id) >= 2, SUBSTRING_INDEX(SUBSTRING_INDEX(GROUP_CONCAT(y.code ORDER BY y.code), ',', 2), ',', -1), NULL) AS code2,
IF(COUNT(y.id) >= 2, SUBSTRING_INDEX(SUBSTRING_INDEX(GROUP_CONCAT(y.value ORDER BY y.code), ',', 2), ',', -1), NULL) AS value2,
IF(COUNT(y.id) >= 3, SUBSTRING_INDEX(SUBSTRING_INDEX(GROUP_CONCAT(y.code ORDER BY y.code), ',', 3), ',', -1), NULL) AS code3,
IF(COUNT(y.id) >= 3, SUBSTRING_INDEX(SUBSTRING_INDEX(GROUP_CONCAT(y.value ORDER BY y.code), ',', 3), ',', -1), NULL) AS value3,
IF(COUNT(y.id) >= 4, SUBSTRING_INDEX(SUBSTRING_INDEX(GROUP_CONCAT(y.code ORDER BY y.code), ',', 4), ',', -1), NULL) AS code4,
IF(COUNT(y.id) >= 4, SUBSTRING_INDEX(SUBSTRING_INDEX(GROUP_CONCAT(y.value ORDER BY y.code), ',', 4), ',', -1), NULL) AS value4,
IF(COUNT(y.id) >= 5, SUBSTRING_INDEX(SUBSTRING_INDEX(GROUP_CONCAT(y.code ORDER BY y.code), ',', 5), ',', -1), NULL) AS code5,
IF(COUNT(y.id) >= 5, SUBSTRING_INDEX(SUBSTRING_INDEX(GROUP_CONCAT(y.value ORDER BY y.code), ',', 5), ',', -1), NULL) AS value5
FROM tbl_user x
LEFT JOIN tbl_transaction y
ON y.userid = x.id
GROUP BY x.id,
x.uniqueid,
x.name
But you do need to code to cope with the max number of columns of values 但是您确实需要编写代码以应对值的最大列数
我真的不知道它是否对您有用,只是尝试一下,
SELECT a.id,a.uniqueid,a.name,b.code,b.value,c.code,c.value FROM test.tbl_user as a,test.tbl_transaction as b,test.tbl_transaction as c where a.id=b.userid AND b.code!=c.code limit 1;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.