2016-08-11 129 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