Ошибка № 1241 SQL-запрос - PullRequest
       3

Ошибка № 1241 SQL-запрос

0 голосов
/ 11 июня 2018

Я получаю код ошибки # 1241.Я искал ответ, но не смог найти ответ, который мне помог.

Вот мой код:

SELECT name, address, city, phone  
FROM customer
WHERE customer.ID IN (
    SELECT customer.ID, COUNT(*) AS amount_reservations 
    FROM customer, (
        SELECT ID 
        FROM customer, reservations 
        WHERE rent_time = 'weekend' AND 
        ID = customer_ID
    ) AS foo 
    WHERE customer.ID = foo.ID 
    GROUP BY customer.ID 
    HAVING amount_reservations > 1
)

Ответы [ 3 ]

0 голосов
/ 11 июня 2018

Я очень рекомендую переписать ваш запрос.Удалите подзапросы - они не нужны.Затем используйте explicit joins вместо запятых.

select c.id, c.name, c.address, c.city, c.phone  
from customer c
    join reservations r on c.id = r.customer_id
where r.rent_time = 'weekend'
group by c.id, c.name, c.address, c.city, c.phone  
having count(*) > 1
0 голосов
/ 11 июня 2018

Если вы хотите использовать in, вы можете радикально упростить запрос:

SELECT c.name, c.address, c.city, c.phone  
FROM customer c
WHERE c.ID IN (SELECT r.customer_id
               FROM reservations r
               WHERE r.rent_time = 'weekend' 
               GROUP BY r.customer_id
               HAVING COUNT(*) > 1
              ) ;

Примечания:

  • Никогда не используйте запятые вFROM пункт.Всегда используйте правильный, явный, стандартный синтаксис JOIN.
  • Используйте псевдонимы таблиц и полные имена столбцов для всех ссылок на столбцы.
  • Вам не нужен JOIN в подзапросе, потому чтоу вас есть идентификатор клиента в таблице бронирования.
0 голосов
/ 11 июня 2018

Подзапрос SELECT customer.ID, COUNT(*) AS amount_reservations должен иметь один столбец, а не два.

Измените его на:

SELECT name, address, city, phone  
  FROM customer  
  WHERE customer.ID IN (
    SELECT customer.ID
      FROM customer, (
        SELECT ID FROM customer, reservations 
          WHERE rent_time = 'weekend' AND ID = customer_ID
        ) AS foo 
      WHERE customer.ID = foo.ID 
      GROUP BY customer.ID HAVING count(*) > 1
    )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...