Главная страница
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.013 c
15-1252275426
NailMan
2009-09-07 02:17
2009.11.08
Кто пользуется автомобильными телеками 9-10"?


2-1253800991
N/O
2009-09-24 18:03
2009.11.08
вопрос по TClientDataSet


6-1209894514
FireMan_Alexey
2008-05-04 13:48
2009.11.08
VPN


15-1245951607
Petr V. Abramov
2009-06-25 21:40
2009.11.08
работа кипит :)


8-1194133995
POMbI4
2007-11-04 02:53
2009.11.08
Конвертирование AVI в BMP