Запрос MySQL возвращает дополнительные результаты

#mysql #sql

#mysql #sql

Вопрос:

Я пытаюсь написать запрос, который возвращает lastName данные из customers таблицы, bidAmount и bidTime из bids таблицы, и productName из product таблицы в определенный день. Таблица ставок имеет оба custom.customerID и product.productID как внешние ключи, поэтому она может получить доступ к связанным данным. Запрос, который я написал, является

 SELECT lastName, bidAmount, bidTime, productName 
FROM product, customer, bids 
WHERE bidTime BETWEEN '06/19/2014 12:00:01 AM' AND '06/19/2014 11:59:59 PM';
 

но по какой-то причине он возвращает копию каждой ставки за период времени для каждого клиента в базе данных, а не только для клиента, который размещает ставку.

Я надеюсь, что все это имеет смысл, я могу объяснить более подробно, если потребуется.

рассматриваемые таблицы customer
bids
product

bids имеет customer.customerID и product.productID в качестве внешних ключей product имеет customer.customerID в качестве внешнего ключа

итак, насколько я знаю, все должно быть подключено соответствующим образом. или я что-то упускаю из виду.

Комментарии:

1. Вам нужны явные объединения, то, как таблицы связаны, показывает полный DDL для всех таблиц.

2. привет @AbhikChakraborty pease смотрите Редактирование в вопросе о том, как связаны таблицы

3. Это декартово произведение, вы должны использовать явное JOINS ON предложение with .

4. спасибо, ребята, я все еще изучаю SQL и совсем забыл о соединениях! возвращаясь к изучению для меня, я думаю, спасибо вам всем!

Ответ №1:

Как упоминалось в комментариях, вам необходимо явно объединить таблицы вместе — на данный момент ваш запрос неявно декартов — объединение таблиц. Попробуйте что-то вроде:

 SELECT c.lastName, b.bidAmount, b.bidTime, p.productName 
FROM bids b
join product p on b.product_id = p.product_id
join customer c on b.customer_id = c.customer_id
WHERE bidTime BETWEEN '06/19/2014 12:00:01 AM' AND '06/19/2014 11:59:59 PM'
 

Комментарии:

1. это сработало! спасибо heaps @Mark Bannister, я все еще изучаю SQL и полностью забыл о соединениях!