#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 и полностью забыл о соединениях!