Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2009.11.08;
Скачать: [xml.tar.bz2];

Вниз

Проблема с 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.005 c
15-1252528212
Юрий
2009-09-10 00:30
2009.11.08
С днем рождения ! 10 сентября 2009 четверг


2-1253123104
GlowSolnce
2009-09-16 21:45
2009.11.08
TADOQuery + Access + Delete


15-1251973975
Б
2009-09-03 14:32
2009.11.08
Не явные фичи Delphi.


15-1252640404
Дмитрий С
2009-09-11 07:40
2009.11.08
Символ неразрывного пробела


2-1253805878
sid
2009-09-24 19:24
2009.11.08
Массивы





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский