Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.11.08;
Скачать: CL | DM;

Вниз

Проблема с SELECT (SQL)   Найти похожие ветки 

 
dmitry1987   (2009-09-18 13:09) [0]

по ходу изучения 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;


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


 
Inovet ©   (2009-09-18 13:20) [1]

> [0] dmitry1987   (18.09.09 13:09)

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


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


"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"

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


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

используй INNER JOIN


 
Ega23 ©   (2009-09-18 13:41) [4]


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


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


 
Ega23 ©   (2009-09-18 13:42) [5]

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

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


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


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


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


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

> 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)


 
Ega23 ©   (2009-09-18 13:52) [8]


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


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


 
Ega23 ©   (2009-09-18 13:53) [9]

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


 
Anatoly Podgoretsky ©   (2009-09-18 15:13) [10]

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



Страницы: 1 вся ветка

Текущий архив: 2009.11.08;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.014 c
15-1252653672
KSergey
2009-09-11 11:21
2009.11.08
SSI+PHP


2-1253670540
Время
2009-09-23 05:49
2009.11.08
подсчет времени


6-1186390697
Салат
2007-08-06 12:58
2009.11.08
Есть ли событие при приеме пакетов клиентом?


1-1223364687
Vlad Oshin
2008-10-07 11:31
2009.11.08
DLL, с пакетами, использую DevExpress, компоненты xxDockxx, AV


15-1252345693
oldman
2009-09-07 21:48
2009.11.08
Поиск и группировка файлов по "тэгам"