Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Проблема с SELECT (SQL)


dmitry1987 ©   (2009-09-18 13:09:00) 

по ходу изучения SQL столкнулся с проблемо: есть, к примеру, БД с двумя таблицами:

Таблица1
---------
ID: Int(autoincrement)
Name: char(255)

Таблица2
---------
ID: Int
Status: char(255)

Таблицы связаны по полю ID. Выполняю запрос:


Query1.Close;
Query1.SQL.Clear;
Query1.SQL.Text := 'SELECT Taблица1.Name, Таблица2.Status FROM Таблица1, Таблица2 WHERE Таблица2.ID = Таблица1.ID';
Query1.Open;


После этого отобранные, записи дублируются, Почему? В чем я ошибаюсь?


Anatoly Podgoretsky   (2009-09-18 15:13:00) [1]

Нет никаких дублей в таблице, есть дубли в частном наборе, кто то не слышал про DISTINCT или кто то не хочет показывать ИД в наборе, наверно хочет помучаться, а то так легко и понятно.


Ega23   (2009-09-18 13:53:00) [2]

Вообще наиболее идеологически правильный вариант будет
SELECT Taблица1.Name, Таблица2.Status
 FROM Таблица1 INNER JOIN Таблица2 ON (Таблица1.ID = Таблица2.ID)
 WHERE Таблица2.ID = 40


Ega23   (2009-09-18 13:52:00) [3]


> По-моему, все равно будет дубль.
> Надо:


Возбми и проверь, чего гадать-то?


Омлет   (2009-09-18 13:48:00) [4]

> Ega23 ©   (18.09.09 13:42) [5]

По-моему, все равно будет дубль.
Надо:
SELECT Taблица1.Name, Таблица2.Status FROM Таблица1
 JOIN Таблица2 ON (Таблица1.ID = Таблица2.ID) and (Таблица2.ID = 40)


dmitry1987   (2009-09-18 13:45:00) [5]


> 'SELECT Taблица1.Name, Таблица2.Status FROM Таблица1, Таблица2
> WHERE Таблица1.ID = Таблица2.ID and Таблица2.ID = 40'Должно
> сработать.


Спасибо, теперь все работает, как надо.


Ega23   (2009-09-18 13:42:00) [6]

'SELECT Taблица1.Name, Таблица2.Status FROM Таблица1, Таблица2 WHERE Таблица1.ID = Таблица2.ID and Таблица2.ID = 40'

Должно сработать.


Ega23   (2009-09-18 13:41:00) [7]


> используй INNER JOIN


Фиолетово. К данной проблеме не имеет отношение.


Омлет   (2009-09-18 13:38:00) [8]

используй INNER JOIN


dmitry1987   (2009-09-18 13:35:00) [9]


'SELECT Taблица1.Name, Таблица2.Status FROM Таблица1, Таблица2 WHERE Таблица2.ID = Таблица1.ID'


блин, ошибочка, не в этом sql, а в:

'SELECT Taблица1.Name, Таблица2.Status FROM Таблица1, Таблица2 WHERE Таблица2.ID = 40'

имеено тут выводятся дублированные записи.  Таблицы смотрел - дубликатов в них точно нет.


Inovet   (2009-09-18 13:20:00) [10]

> [0] dmitry1987   (18.09.09 13:09)

Значит в Таблица2 есть дубли, что нормально, но лучше добавить в неё на будущее собствкнный ID для уникальности записи.


Наверх

Титульная страница Поиск, карта сайта Написать письмо