Вложенные подзапросы к MySQL в 2 уровнях

Узнай цену своей работы

Формулировка задачи:

Получаю список строк по условию:
SELECT * FROM TABLE WHERE s=1 ORDER BY id
Затем нужно этот список строк обработать через такой запрос, таблица test должна содержать полученные в первом запросе строки:
SELECT id
FROM test t1
WHERE EXISTS
         (SELECT id
          FROM test t2
          WHERE t2.id IN (t1.id + 10, t1.id - 10))
перебрал уже с десяток вариантов, никак не состыкую...

Решение задачи: «Вложенные подзапросы к MySQL в 2 уровнях»

textual
Листинг программы
SELECT CONCAT(a1.id,':(',a1.x,',',a1.y,')') v1, CONCAT(a2.id,':(',a2.x,',',a2.y,')') v2
FROM   all_items_10x10 a1
JOIN   all_items_10x10 a2 ON (a2.x=a1.x AND a2.y=a1.y+1 AND a2.s=0)
WHERE  a1.s = 0

Объяснение кода листинга программы

  1. В данном коде используется оператор SELECT для выбора данных из таблицы all_items_10x10.
  2. В выбранных полях указаны CONCAT(a1.id,':(',a1.x,',',a1.y,')') и CONCAT(a2.id,':(',a2.x,',',a2.y,')') - это функции CONCAT, которые объединяют значения полей id, x, y в одну строку с использованием разделителя ':('. Предполагается, что эти поля содержат числовые значения.
  3. Для соединения таблиц all_items_10x10 используется оператор JOIN с условием (a2.x=a1.x AND a2.y=a1.y+1 AND a2.s=0). Здесь мы соединяем таблицу all_items_10x10 по полю x и y с условием, что значение поля s у соединенной записи будет равно 0.
  4. В конце кода добавляется условие WHERE a1.s = 0, которое ограничивает выборку только теми записями, у которых значение поля s равно 0.
  5. В результате выполнения данного кода будет получена выборка из таблицы all_items_10x10, содержащая только два поля: v1 и v2, которые представляют собой строки, сформированные с использованием функций CONCAT.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 3.9 из 5