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

MySQL Ugyldig forespørgsel:For højt niveau af indlejring til udvalgt

Kan være relateret tilMySQL-fejl #41156, Liste over afledte tabeller fungerer som en kæde af gensidigt -indlejrede underforespørgsler .

Fejlloggen angiver, at den er verificeret mod MySQL 5.0.72, 5.1.30 og 6.0.7.
Løbet i MySQL 5.1.37, MySQL 5.4.2 (som blev 5.5.noget) og NDB 7.1.0 .

Med hensyn til din omdesignede forespørgsel i spørgsmålet ovenfor:

Pivot-forespørgsler kan være vanskelige. Du kan bruge metoden foreslået af Andrew i hans svar . Hvis du søger efter mange UPC-værdier, skal du skrive applikationskode for at bygge SQL-forespørgslen og tilføje lige så mange JOIN-sætninger som antallet af UPC-værdier, du søger efter.

MySQL har en grænse for antallet af joinforbindelser, der kan udføres i en enkelt forespørgsel, men det eksempel, du skal, når ikke grænsen. Det vil sige, at den forespørgsel, du viser, virker.

Jeg går ud fra, at du viser et eksempel på en forespørgsel, der søger efter fire UPC-koder, hvorimod din app kan konstruere forespørgslen dynamisk for et større antal UPC-koder, og det kan nogle gange være mere end 61.

Det ser ud til, at målet med din forespørgsel er at returnere butikker, der har mindst én af de angivne UPC-koder. Du kan gøre det mere enkelt i følgende forespørgsel:

SELECT DISTINCT s.*
FROM allStores AS s
JOIN storeCheckRecords AS cr
  ON s.e_address = cr.e_address
     AND cr.upc IN ('650637119004','650637119011','650637374007','650637374014');

Du kan bruge denne metode på andre måder, for eksempel til at finde butikker, der har alle fire UPC'er:

SELECT s.*
FROM allStores AS s
JOIN storeCheckRecords AS cr
  ON s.e_address = cr.e_address
     AND cr.upc IN ('650637119004','650637119011','650637374007','650637374014');
GROUP BY s.e_address
HAVING COUNT(DISTINCT upc) = 4;

Eller for at finde butikker, som nogle, men ikke alle fire UPC'er:

SELECT s.*
FROM allStores AS s
JOIN storeCheckRecords AS cr
  ON s.e_address = cr.e_address
     AND cr.upc IN ('650637119004','650637119011','650637374007','650637374014');
GROUP BY s.e_address
HAVING COUNT(DISTINCT upc) < 4;

Eller for at finde butikker, der mangler alle fire UPC'er:

SELECT s.*
FROM allStores AS s
JOIN storeCheckRecords AS cr
  ON s.e_address = cr.e_address
     AND cr.upc IN ('650637119004','650637119011','650637374007','650637374014');
WHERE cr.e_address IS NULL;

Du skal stadig skrive noget kode for at bygge denne forespørgsel, men det er lidt nemmere at gøre, og det overskrider ikke nogen grænser for antallet af joinforbindelser eller underforespørgsler, du kan køre.



  1. java.sql.SQLEundtagelse:Efter slutningen af ​​resultatet sat i mysql

  2. Brug PostgreSQL SSL-forbindelse i rust med selvsignerede certifikater

  3. Hvordan kan jeg rette MySQL Load Error

  4. Vælg seneste post fra højre tabel, når du bruger join i mysql