Diskuze: dotaz na data z tří tabulek
V předchozím kvízu, Online test znalostí SQL a databází, jsme si ověřili nabyté zkušenosti z kurzu.

Člen

Zobrazeno 16 zpráv z 16.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí SQL a databází, jsme si ověřili nabyté zkušenosti z kurzu.
Pokud má každý uživatel roli, pak bych to napsal nějak takto:
SELECT [UserName], [Name]
FROM [AspNetUsers]
INNER JOIN [AspNetUserRoles] ON [Id] = [UserId]
INNER JOIN [AspNetRoles] ON [roleId] = [Id] z tabulky AspNetUserRoles
ORDER BY [RoleId]
Nevím, jak se tu zapisují i názvy tabulek, když kolidují názvy sloupců. V PHP a MySQL by se to napsalo jako
`AspNetUsers`.`roleId`
Díky za nakopnutí, funguje mi toto
SELECT *
FROM [AspNetUserRoles]
INNER JOIN [AspNetUsers] ON [AspNetUserRoles].[UserId] =
[AspNetUsers].[Id]
INNER JOIN [AspNetRoles] ON [AspNetUserRoles].[RoleId] =
[AspNetRoles].[Id]
Nefunguje mi SELECT [UserName], [Name] tak jsem zatím dal SELECT *
Na to ještě musím přijít
Jen bych v tomto případě místo INNER JOIN použil LEFT OUTER JOIN,
protože když tam bude uživatel, který nebude mít žádnou roli, tak ti to s
innerem nezobrazí nic.
EDIT: A hlavně bys měl místo SELECT * použít konkrétní sloupce, které
chceš zobrazit
Já vím, že bych měl zadat konkrétní sloupce, ale nedaří se mi najít
správnou verzi zápisu.
Zkoušel jsme toto a vše bylo špatně
SELECT [Name],[UserName]
SELECT [UserId],[RoleId]
SELECT [AspNetUsers].[Id],[AspNetRoles].[Id]
SELECT [AspNetUserRoles].[UserId],[AspNetUserRoles].[RoleId]
SELECT [AspNetRoles].[Name],[AspNetUsers].[UserName]
Např. za předpokladu, že každý uživatel MUSÍ mít přiřazenou nějakou budovu zobrazím informace o uživateli z tabulky AspNetUsers (kde je budova zadána jako ID budovy) a název budovy z tabulky Budovy
SELECT AspNetUsers.Id, AspNetUsers.LastName + ' ' + AspNetUsers.FirstName AS Jmeno, AspNetUsers.Email, AspNetUsers.Pracoviste, Budovy.BudovaNazev
FROM AspNetUsers
INNER JOIN Budovy ON AspNetUsers.BudovaId = Budovy.BudovaId
ORDER BY Jmeno
Kdyby budovu přiřazenou mít nemusel, místo INNER JOIN bych musel použít LEFT OUTER JOIN
Jednak je zbytečné psát ty hranaté závorky a hlavně ti tam chybí JOIN a taky nemáš z jaké tabulky chceš sosat...
Jasný vycházím z toho co mi fungovalo a snažím se nahradit hvězdičku u
SELECTu jen sloupci které potřebuji.
Díky za upozornění, že závorky nejsou potřeba,
Takže celý dotaz je:
SELECT *
FROM AspNetUserRoles
INNER JOIN AspNetUsers ON AspNetUserRoles.UserId = AspNetUsers.Id
INNER JOIN AspNetRoles ON AspNetUserRoles.RoleId = AspNetRoles.Id
a v tabulce si vypíšu hodnoty UserName a Name. Takto mi to funguje.
Ale zbytečně ze serveru tahám celou tabulku.
Něco takovýho nefunguje?
SELECT AspNetUsers.Name AS userName, AspNetRoles.Name AS roleName
FROM AspNetUserRoles
INNER JOIN AspNetUsers ON AspNetUserRoles.UserId = AspNetUsers.Id
INNER JOIN AspNetRoles ON AspNetUserRoles.RoleId = AspNetRoles.Id
Nemáš zač. Možná by si body spíše zasloužil Michal.
Zobrazeno 16 zpráv z 16.