Форум: "Начинающим";
Текущий архив: 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