Главная страница
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.012 c
15-1252419013
Rule
2009-09-08 18:10
2009.11.08
Как поменять комбинацию клавиш в делфи ИДЕ 7


2-1253086545
Роман
2009-09-16 11:35
2009.11.08
как работать с файлом мс прожект


2-1253616806
night_light
2009-09-22 14:53
2009.11.08
передача динамического массива в CreatePolygonRgn


9-1183139502
CMOS
2007-06-29 21:51
2009.11.08
Организация OnClick у спарйта?


1-1222628088
Castello
2008-09-28 22:54
2009.11.08
Общение между приложениями