2016-08-11 126 views
0

我有兩個mySql查詢來從數據庫中獲取結果。我正試圖將它們結合在一起。mySql結合兩個SELECT查詢JOIN

查詢1:

SELECT userEwallets.id as ewalletId, users.id as userId , money_repositories.money as money, a.nestedUserId 
FROM userEwallets 
JOIN users ON users.id = userEwallets.userId 
JOIN money_repositories ON userEwallets.id = money_repositories.ewalletId 
WHERE ewalletNumber = 'SHIRR937303656' 

查詢2:

SELECT nested.id as nestedUserId 
FROM userEwallets as nested 
JOIN users ON users.id = nested.userId 
JOIN money_repositories ON nested.id = money_repositories.ewalletId 
WHERE ewalletNumber = 'SHIRR9122331743' 

,然後我的組合命令:

SELECT userEwallets.id as ewalletId, users.id as userId , money_repositories.money as money, a.nestedUserId 
FROM (
    SELECT nested.id as nestedUserId 
    FROM userEwallets as nested 
    JOIN users ON users.id = nested.userId 
    JOIN money_repositories ON nested.id = money_repositories.ewalletId 
    WHERE ewalletNumber = 'SHIRR912233' 
) as a 
JOIN users ON users.id = userEwallets.userId 
JOIN money_repositories ON userEwallets.id = money_repositories.ewalletId 
WHERE ewalletNumber = 'SHIRR93730' 

我得到這個錯誤:

#1054 - Unknown column 'userEwallets.id' in 'field list' 

這兩個命令都相同,但是他們在where子句簡單差作爲ewalletNumber

WITH數據庫結構UPDATE

money_repositories表:

CREATE TABLE IF NOT EXISTS `money_repositories` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `userId` int(11) NOT NULL, 
    `ewalletId` int(11) NOT NULL, 
    `money` int(11) NOT NULL, 
    `createdAt` int(11) NOT NULL, 
    `updatedAt` int(11) NOT NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_persian_ci AUTO_INCREMENT=4 ; 

userEwallets表:

CREATE TABLE IF NOT EXISTS `userEwallets` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `userId` int(11) NOT NULL, 
    `ewalletNumber` varchar(15) COLLATE utf8_persian_ci NOT NULL, 
    `currencySymbol` varchar(5) COLLATE utf8_persian_ci NOT NULL, 
    `createdAt` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, 
    `updatedAt` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00', 
    PRIMARY KEY (`id`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_persian_ci AUTO_INCREMENT=7 ; 

users表:

CREATE TABLE IF NOT EXISTS `users` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `username` varchar(20) COLLATE utf8_persian_ci NOT NULL, 
    `password` varchar(65) COLLATE utf8_persian_ci NOT NULL, 
    `name` varchar(20) COLLATE utf8_persian_ci NOT NULL, 
    `family` varchar(20) COLLATE utf8_persian_ci NOT NULL, 
    `birthDay` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP, 
    `email` varchar(20) COLLATE utf8_persian_ci NOT NULL, 
    `mobileNumber` varchar(15) COLLATE utf8_persian_ci NOT NULL, 
    `verifyCode` varchar(5) COLLATE utf8_persian_ci NOT NULL, 
    `photoUri` varchar(50) COLLATE utf8_persian_ci NOT NULL, 
    `ebanNumber` varchar(20) COLLATE utf8_persian_ci NOT NULL, 
    `status` tinyint(1) NOT NULL, 
    `createdAt` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00', 
    `updatedAt` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00', 
    PRIMARY KEY (`id`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_persian_ci AUTO_INCREMENT=35 ; 

回答

1

userEwallets.ida.id在你的組合命令的選擇。因爲你得到的子查詢爲a

修改後的組合查詢;

SELECT a.id      AS ewalletId, 
     users.id     AS userId, 
     money_repositories.money AS money, 
     a.nesteduserid 
FROM (SELECT nested.id AS nestedUserId, 
       nested.id, 
       nested.ewalletnumber 
     FROM userewallets AS nested 
       JOIN users 
       ON users.id = nested.userid 
       JOIN money_repositories 
       ON nested.id = money_repositories.ewalletid 
     WHERE nested.ewalletnumber = 'SHIRR912233') AS a 
     JOIN users 
     ON users.id = userewallets.userid 
     JOIN money_repositories 
     ON userewallets.id = money_repositories.ewalletid 
WHERE a.ewalletnumber = 'SHIRR93730' 

camleCase查詢固定:

SELECT a.id      AS ewalletId, 
     users.id     AS userId, 
     money_repositories.money AS money, 
     a.nestedUserId 
FROM (SELECT nested.id AS nestedUserId, 
       nested.id, 
       nested.ewalletNumber 
     FROM userEwallets AS nested 
       JOIN users       ON users.id = nested.userId 
       JOIN money_repositories ON nested.id = money_repositories.ewalletId 
     WHERE nested.ewalletNumber = 'SHIRR912233') AS a 

     JOIN users       ON users.id   = nested.userId 
     JOIN money_repositories ON userEwallets.id = money_repositories.ewalletId 

WHERE a.ewalletNumber = 'SHIRR937303' 
+0

我收到此錯誤:''where'子句中'未知列'ewalletNumber' –

+0

ewalletNumber列屬於哪個表?如果它屬於'userEwallets',則嘗試'嵌套。ewalletNumber ='SHIRR912233''您在獲取時使用別名。但是你不在別處或選擇情況使用別名。 – bencagri

+0

我再次收到錯誤#1054 - 'where子句'中的未知列'nested.ewalletNumber' –

0

因爲你不包括查詢表userEwallets除了這不會在子查詢外部識別子查詢。嘗試

UPDATE

Select 
    users.id as userId, userEwallets.id As ewalletId,money_repositories.money 
From 
    users 
Inner Join 
    userEwallets ON userEwallets.userId= users.id 
Inner Join 
    money_repositories ON money_repositories.userId=users.id 
And 
    money_repositories.ewalletId = userEwallets.id 
Where 
    userEwallets.ewalletNumber = 'SHIRR93730' 
+0

謝謝,我得到了同樣的錯誤'未知列 'userEwallets.id' 在「字段list'' –

+0

再次 – jonju

+0

檢查更新的查詢是。它應該是** users.id **不是** users.userId **在外部select語句 – jonju