簡體   English   中英

MySQL查詢聯接兩個表並得到合並兩行為一

[英]MySql query joining two table and get combine two row to be one

我有桌子

tbl_user

 id uniqid name
 1  123456 AAAA
 2  333333 BBBB

tbl_transaction

 id userid code value
 1  1      2202 500000
 2  1      2204 700000 

以及如何獲得這樣的結果

id uniqueid name code1 value1 code2 value2
1  123456   AAAA 2202  500000  2204  700000

在我的查詢中,我只是知道要使用加入我的代碼

SELECT x.id, x.uniqueid, x.name, y.value
        FROM tbl_user x
        LEFT JOIN tbl_transaction y
            ON y.userid = x.id

一種方法是,使用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

但是您確實需要編寫代碼以應對值的最大列數

我真的不知道它是否對您有用,只是嘗試一下,

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM