2016-08-11 3 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' 

Оба команд такие же, но они имеют простую разницу в качестве ewalletNumber в where п

ОБНОВЛЕНИЕ с базой данных СТРУКТУРА

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.id должен быть a.id в Select вашей команды комбинации. Потому что вы получаете подзапрос как 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

. Я получаю эту ошибку: 'Unknown column 'ewalletNumber' in 'where clause'' –

+0

столбец ewalletNumber принадлежит к какой таблице ? если он принадлежит 'userEwallets', попробуйте' inested.ewalletNumber = 'SHIRR912233'' вы используете псевдоним для таблиц во время получения. Но вы не используете псевдонимы где или выбрать ситуации. – bencagri

+0

Я снова получаю ошибку # 1054 - Неизвестный столбец 'nested.ewalletNumber' в 'where clause'' –

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 ** not ** users.userId ** во внешнем заявлении выбора – jonju

Смежные вопросы