2016-08-11 5 views
0

Ich habe zwei MySQL-Abfragen, um Ergebnisse von Datenbanken zu erhalten. Ich versuche, mich ihnen anzuschließen.mySql kombinieren zwei SELECT-Abfragen mit JOIN

Abfrage 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' 

Abfrage 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' 

und meine Kombination Befehl dann:

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' 

ich diesen Fehler:

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

Beide Befehle sind die gleichen, aber sie haben einfach Unterschied als ewalletNumber in where Klausel

UPDATE MIT DATABASE STRUKTUR

money_repositories Tabelle:

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 Tabelle:

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 Tabelle:

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 ; 

Antwort

1

userEwallets.ida.id in Wählen Sie Ihre Kombination Befehl sein sollte. Weil Sie Unterabfrage als a erhalten.

Geänderte kombinierte Abfrage;

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 Abfrage festgelegt:

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

Ich bekomme diesen Fehler: "Unbekannte Spalte 'ewalletNumber' in 'where Klausel'' –

+0

ewalletNumber Spalte gehört zu welcher Tabelle ? Wenn es zu 'userEwallets' gehört, versuche es' geschachtelt'.ewalletNumber = 'SHIRR1212233' Sie verwenden einen Alias ​​für Tabellen, während Sie erhalten. Aber Sie verwenden keine Aliase, um Situationen auszuwählen oder auszuwählen. – bencagri

+0

Ich bekomme wieder Fehler # 1054 - Unbekannte Spalte 'nested.ewalletNumber' in 'where clause'' –

0

Weil Sie nicht Tabelle einschließlich sind userEwallets in der Abfrage mit Ausnahme der Unterabfrage, die nicht außerhalb der Unterabfrage erkannt wird. Versuchen

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

Danke, bekomme ich die gleichen Fehler 'Unbekannte Spalte 'userEwallets.id' in‚Feld list'' –

+0

erneut die aktualisierte Abfrage prüfen – jonju

+0

Ja. Es sollte ** users.id ** not ** users.userId ** in der äußeren select-Anweisung – jonju

Verwandte Themen