Mysql
 sql >> база данни >  >> RDS >> Mysql

MySQL Невалидна заявка:Твърде високо ниво на влагане за избор

Може да е свързано сMySQL грешка #41156, Списъкът с извлечени таблици действа като верига от взаимно -вложени подзаявки .

Регистърът за грешки показва, че е проверен спрямо MySQL 5.0.72, 5.1.30 и 6.0.7.
Поправено в MySQL 5.1.37, MySQL 5.4.2 (който стана 5.5.нещо) и NDB 7.1.0 .

По отношение на преработената ви заявка във въпроса по-горе:

Пивотните заявки могат да бъдат трудни. Можете да използвате метода, предложен от Андрю в неговия отговор . Ако търсите много UPC стойности, трябва да напишете код на приложението, за да изградите SQL заявката, като добавите толкова JOIN клаузи, колкото броя на UPC стойностите, които търсите.

MySQL има ограничение за броя на присъединяванията, които могат да бъдат направени в една заявка, но примерът, който трябва да не достига лимита. Тоест заявката, която показвате, работи.

Предполагам, че показвате примерна заявка за търсене на четири UPC кода, докато приложението ви може да конструира заявката динамично за по-голям брой UPC кодове, а понякога това може да е повече от 61.

Изглежда, че целта на вашата заявка е да върне магазини, които имат поне един от изброените UPC кодове. Можете да направите това по-просто в следната заявка:

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');

Можете да използвате този метод по други начини, например, за да намерите магазини, които имат и четирите UPC:

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;

Или да намерите магазини, че някои, но не всичките четири от UPC:

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;

Или да намерите магазини, в които липсват и четирите UPC:

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;

Все още трябва да напишете някакъв код, за да създадете тази заявка, но това е малко по-лесно за изпълнение и не надвишава никакви ограничения за броя на присъединяванията или подзаявките, които можете да изпълнявате.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Генериране на сол Crypt() и криптиране на парола, добре изпълнени?

  2. mysql изберете с множество от n до n

  3. отношение много към много в доктрината

  4. свържете java към mysql с помощта на jdbc на osx

  5. Как да пренасочвам към различна страница по тип потребител в php и mysql