Главная страница
    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.007 c
2-1253654979
Евгений Р.
2009-09-23 01:29
2009.11.08
Использование $IFDEF


15-1252412241
stas
2009-09-08 16:17
2009.11.08
Библиотека для работы с ZIP


11-1207590818
MTsv DN
2008-04-07 21:53
2009.11.08
Перехват инфы из консольки


2-1253003813
новый
2009-09-15 12:36
2009.11.08
pointer. Не могу разобраться...


1-1222948814
Alex_C
2008-10-02 16:00
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский