SQL
-
- Новичок
- Posts: 27
- Joined: 22 Jul 2004 15:58
SQL
May be somebody had the same problem. There are two the same (identical) rows in the table in SQL. For example , we got this table from Excell. Initially, it was a record of guests viting the restorant, and for whatever reason, we duplicate one row.
We need to have just one row. Problem: How to delete one row?
Thank you.
We need to have just one row. Problem: How to delete one row?
Thank you.
-
- Уже с Приветом
- Posts: 1015
- Joined: 05 Aug 2004 18:50
- Location: US, East
-
- Уже с Приветом
- Posts: 3982
- Joined: 13 Jul 2000 09:01
- Location: SVX -> BOS -> BUR -> SJC
-
- Уже с Приветом
- Posts: 23804
- Joined: 05 Jul 2003 22:34
- Location: Брест -> St. Louis, MO
WildVlad wrote:Создайте курсор, например,
SELECT * FROM mytable WHERE A='A' AND B=2
так чтобы в резальтсете были только строчки из которых надо выкинуть дубликаты, потом в программе идите по курсору и проверив, что мы текущая строка не первая (счётчик в цикле сами заведите), удаляйте текущую строку.
И что, когда вы так сказали на интервью - то вас взяли?
![Wink :wink:](./images/smilies/icon_wink.gif)
-
- Уже с Приветом
- Posts: 3982
- Joined: 13 Jul 2000 09:01
- Location: SVX -> BOS -> BUR -> SJC
-
- Новичок
- Posts: 27
- Joined: 22 Jul 2004 15:58
WildVlad wrote:При чём здесь интервью? Ну и чем решение использовать курсор для удаления записей из таблицы плохо? Если delete написать не получается?katit wrote:И что, когда вы так сказали на интервью - то вас взяли?
Kursor is primary key, or index?
Index would not work, because of dups, and delete does not work.
-
- Уже с Приветом
- Posts: 3982
- Joined: 13 Jul 2000 09:01
- Location: SVX -> BOS -> BUR -> SJC
Glushk wrote:Kursor is primary key, or index?
Index would not work, because of dups, and delete does not work.
Нет, это несколько другое. То есть здесь чистым SQLем не обойтись. (Можно написать Stored procedure, но хрен редьки не слаще).
Из программы можно запустить SQL-выражение, возвращающее ResultSet (DataSet whatever depends on programming language), и затем можно ходить по возращённому resultset'у (иногда произвольно, иногда только вперёд, иногда только назад), модифицировать, втсавлять и удалять данные в нём и изменения будут сохранены в базе (если сделаете commit).
Примечание: некторые базы и/или языки программирования требуют специального режима запуска SQL-запросов, для того, чтобы можно было модифицировать resultset.
Ну или можно написать stored procedure, которая суть есть программа, только выполняется сразу базой данных, и st proc сделает то же самое.
I hated LA
-
- Уже с Приветом
- Posts: 1015
- Joined: 05 Aug 2004 18:50
- Location: US, East
CREATE TABLE AA
(
A VARCHAR(10),
B VARCHAR(10)
)
INSERT INTO AA VALUES('A1', 'B1')
INSERT INTO AA VALUES('A1', 'B1')
INSERT INTO AA VALUES('A2', 'B2')
INSERT INTO AA VALUES('A2', 'B2')
SELECT * FROM AA
ALTER TABLE AA
ADD ID INT IDENTITY(0,1)
DELETE FROM AA
WHERE 1 < (SELECT COUNT(*) FROM AA A1 WHERE A1.A= AA.A)
AND ID > ( SELECT MIN(ID) FROM AA A2 WHERE A2.A= AA.A)
SELECT * FROM AA
ALTER TABLE AA
DROP COLUMN ID
(
A VARCHAR(10),
B VARCHAR(10)
)
INSERT INTO AA VALUES('A1', 'B1')
INSERT INTO AA VALUES('A1', 'B1')
INSERT INTO AA VALUES('A2', 'B2')
INSERT INTO AA VALUES('A2', 'B2')
SELECT * FROM AA
ALTER TABLE AA
ADD ID INT IDENTITY(0,1)
DELETE FROM AA
WHERE 1 < (SELECT COUNT(*) FROM AA A1 WHERE A1.A= AA.A)
AND ID > ( SELECT MIN(ID) FROM AA A2 WHERE A2.A= AA.A)
SELECT * FROM AA
ALTER TABLE AA
DROP COLUMN ID
-
- Уже с Приветом
- Posts: 23804
- Joined: 05 Jul 2003 22:34
- Location: Брест -> St. Louis, MO
-
- Уже с Приветом
- Posts: 23804
- Joined: 05 Jul 2003 22:34
- Location: Брест -> St. Louis, MO
-
- Уже с Приветом
- Posts: 3982
- Joined: 13 Jul 2000 09:01
- Location: SVX -> BOS -> BUR -> SJC
Ну... Я новстями SQLя интересуюсь малоkatit wrote:Ну как-бы этот вопрос в топ 10 на интервью по SQL. В ньюсгрупах он спрашивается примерно 3 раза в неделю
![Smile :)](./images/smilies/icon_smile.gif)
![Smile :)](./images/smilies/icon_smile.gif)
Кстати, моё решение не использует временных таблиц. Да, я знаю, что взамен оно требует запуска запроса в тяжёлом режиме
![Smile :)](./images/smilies/icon_smile.gif)
I hated LA
-
- Новичок
- Posts: 27
- Joined: 22 Jul 2004 15:58
katit wrote:WildVlad wrote:При чём здесь интервью?
Ну как-бы этот вопрос в топ 10 на интервью по SQL. В ньюсгрупах он спрашивается примерно 3 раза в неделю
One more SQL question:
I have 12 columns corresponding to months of a year. I need to summ all 12 months entry for each row. Syntax: ('column1')+('column2')+.....+(column12). Is there anything like : Column(1+12) ?
Thank you.
-
- Уже с Приветом
- Posts: 8255
- Joined: 23 Jul 2003 03:53
- Location: SPb - KW - NY - CT - MD
Glushk wrote:I have 12 columns corresponding to months of a year. I need to summ all 12 months entry for each row. Syntax: ('column1')+('column2')+.....+(column12). Is there anything like : Column(1+12) ?
Thank you.
Любой синтаксис типа Sum(Column1:Column12) противоречил бы идеологии SQL: там ничего не базируется на предполагаемом порядке колонок таблицы. Это не Excel.
А чем кому не угодила простая сумма: C1+C2+C3+...+C12 ? Это настолько частный случай для DBMS, что совершенно незачем городить для этого отдельный синтаксис, функцию, или еще какую-нибудь хренотень...
LG - Life's good.
But good life is much better.
But good life is much better.
-
- Новичок
- Posts: 27
- Joined: 22 Jul 2004 15:58
SVK wrote:Glushk wrote:I have 12 columns corresponding to months of a year. I need to summ all 12 months entry for each row. Syntax: ('column1')+('column2')+.....+(column12). Is there anything like : Column(1+12) ?
Thank you.
Любой синтаксис типа Sum(Column1:Column12) противоречил бы идеологии SQL: там ничего не базируется на предполагаемом порядке колонок таблицы. Это не Excel.
А чем кому не угодила простая сумма: C1+C2+C3+...+C12 ? Это настолько частный случай для DBMS, что совершенно незачем городить для этого отдельный синтаксис, функцию, или еще какую-нибудь хренотень...
if you have 12 columns to summ up - it's fine. What if you have them for last 30 years? 360, it would be annoying to type all 360 column names...