sql >> Database teknologi >  >> RDS >> Mysql

VÆLG * FRA flere tabeller. MySQL

Det, du gør her, kaldes en JOIN (selvom du gør det implicit, fordi du vælger fra flere tabeller). Det betyder, at hvis du ikke angav nogen betingelser i din WHERE-klausul, havde du alle kombinationer af de tabeller. Kun med din betingelse begrænser du din tilslutning til de rækker, hvor drink-id'et matcher.

Men der er stadig X flere rækker i resultatet for hver drink, hvis der er X billeder med dette særlige drinks_id. Dit udsagn begrænser ikke hvilket foto(r), du vil have!

Hvis du kun vil have én række pr. drink, skal du fortælle SQL, hvad du vil gøre, hvis der er flere rækker med et bestemt drinks_id. Til dette har du brug for gruppering og en samlet funktion . Du fortæller SQL, hvilke poster du vil gruppere sammen (for eksempel alle lige drinks_id'er), og i SELECT skal du fortælle, hvilken af ​​de forskellige poster for hver grupperet resultatrække, der skal tages. For tal kan dette være gennemsnit, minimum, maksimum (for at nævne nogle).

I dit tilfælde kan jeg ikke se det fornuftige i at forespørge på billederne for drinks, hvis du kun vil have én række. Du troede sikkert, at du kunne have en matrix af billeder i dit resultat for hver drink, men SQL kan ikke gøre dette. Hvis du kun vil have enhver billede, og du er ligeglad med, hvilken du får, bare grupper efter drinks_id (for kun at få én række pr. drink):

SELECT name, price, photo
FROM drinks, drinks_photos
WHERE drinks.id = drinks_id 
GROUP BY drinks_id

name     price   photo
fanta    5       ./images/fanta-1.jpg
dew      4       ./images/dew-1.jpg

I MySQL har vi også GROUP_CONCAT , hvis du ønsker at filnavnene skal sammenkædes til en enkelt streng:

SELECT name, price, GROUP_CONCAT(photo, ',')
FROM drinks, drinks_photos
WHERE drinks.id = drinks_id 
GROUP BY drinks_id

name     price   photo
fanta    5       ./images/fanta-1.jpg,./images/fanta-2.jpg,./images/fanta-3.jpg
dew      4       ./images/dew-1.jpg,./images/dew-2.jpg

Dette kan dog blive farligt, hvis du har , inden for feltværdierne, da du højst sandsynligt vil opdele dette igen på klientsiden. Det er heller ikke en standard SQL-aggregatfunktion.



  1. Sådan importeres MySQL-databaser i kommandolinjen

  2. Vil du oprette forbindelse til DB fra en Chrome-udvidelse?

  3. Søg om tal er indeholdt i et udtryk som:1-3,5,10-15,20

  4. Hvad er forskellen mellem visninger og materialiserede visninger i Oracle?