идентификатор | имя |
1 | aa |
2 | bb |
3 | cc |
1 | aa |
2 | bb |
3 | cc |
идентификатор | имя |
1 | aa |
2 | bb |
3 | cc |
ВЫБЕРИТЕ ОТЛИЧНЫЙ идентификатор, имя ВТО #t ИЗ таблицы1 УДАЛИТЬ таблицу1 ВСТАВЛЯТЬ Таблица INTO1 ВЫБИРАТЬ * ОТ #т |
ID | Квалификация | персонала |
1 | 1 | VB |
2 | 1 | PHP |
3 | 1 | ASP |
4 | 2 | PHP |
5 | 3 | ASP |
6 | 4 | VB |
7 | 4 | ASP |
ВЫБЕРИТЕ сотрудника ИЗ [Таблица] ГДЕ сотрудник В (ВЫБЕРИТЕ сотрудника ИЗ [Таблица] ГДЕ навык='VB') И навык='PHP' |
3. Проблемы слияния баз данных
В доступе есть две таблицы. Я хочу объединить содержимое двух таблиц.
Таблица [а] имеет следующую структуру:
[id] | номер | автоматический номер |
[имя] | текст | названия |
[цена] | номер | цены |
[guige] | текст | спецификации |
[changjia] | текст | производителя |
[baozhuang] | текст | упаковки |
[danwei] | текст | единицы измерения |
Всего 900 записей. За исключением полей id и name, все остальные могут быть пустыми.
Таблица [б] имеет следующую структуру:
[id] | номер | автоматический номер |
[имя] | текст | имени |
[цена] | номер | цены |
[changjia] | текст | производителя |
[danwei] | текст | единицы измерения |
[xingzhi] | текст | свойства |
Всего записей 800. За исключением полей id и name, здесь на несколько полей меньше, чем в таблице [a], но есть еще один символ [синчжи]. Все остальные могут быть пустыми.
Теперь я хочу создать новую таблицу [c] со следующей структурой, содержимое которой представляет собой сумму содержимого двух таблиц.
[id] | номер | автоматический номер |
[имя] | текст | имени |
[цена] | номер | цены |
[guige] | текст | спецификации |
[changjia] | текст | производителя |
[baozhuang] | текст | упаковки |
[danwei] | текст | единицы измерения |
[xingzhi] | текст | природы |
Вы можете использовать операторы sql, ручные операции или XML. Не беспокойтесь о том, как это реализовать. Я буду очень расстроен, если нам действительно придется ввести 800 записей, я умру.
отвечать:
1. Таким образом
вставить в c(id,name,.....) выберите идентификатор, имя,..... из вставить в c(id,name,.....) выберите max(id)+1,имя,..... из б |
2.Коррекция:
Если выполняется непосредственно в анализаторе запросов:
вставить в c(имя,....) выберите имя,..... из вставить в c(имя,....) выберите имя,..... из б |
3. Используйте метод объединения
вставить в [c] ([id], номер, автоматический номер) выберите [id], номер, автоматический номер из [a] союз выберите [id], номер, автоматический номер из [b] |
4.asp решение
<% 'Обнаружение цикла таблицы a Установите rs = Server.CreateObject("ADODB.RECORDSET") rs.open "выбрать * из заказа по идентификатору",conn,1,1 Делай пока не rs.eof Call actAdd(rs("name")) 'Вызов функции, например добавления содержимого в таблицу b! rs.MoveNext Петля rs.Close Setrs=Ничего Дополнительный актДобавить(txt) Дим ц, sql sql = "вставить в значения b(name)('"& txt &"')" Установите ts = Conn.Execute(sql) ts.Закрыть Установите ts = Ничего конец субтитра %> |
5.asp решение
<% тусклый arr_temp1,arr_temp2,arr_data set rs=conn.execute("выберите идентификатор,имя,цену,guige,changjia,baozhuang,danwei из a") arr_temp1=rs.getrows RS.закрыть установить rs=ничего set rs=conn.execute("выберите идентификатор,имя,цену,guige,changjia,danwei,xingzhi из b") arr_temp2=rs.getrows RS.закрыть установить rs=ничего rem начинает обработку redim arr_data(ubound(arr_temp1,2)+ubound(arr_temp2,2),7) rem копирует содержимое двух массивов. Эту часть я написал сам, сделал два цикла и затем сохранил ее в базе данных. %> |
Наконец преобразуйте некоторые классические операторы SQL:
1. Рекомендовано Wawa: несколько изысканных операторов SQL.
Описание: Скопируйте таблицу (копируйте только структуру, имя исходной таблицы: a, новое имя таблицы: b)
SQL: выберите * в b из a, где 1<>1
Описание: Копировать таблицу (копировать данные, имя исходной таблицы: a, имя целевой таблицы: b)
SQL: вставить в b(a, b, c) выбрать d,e,f из b;
Описание: Отображение статьи, отправителя и времени последнего ответа.
SQL: выберите a.title,a.username,b.adddate из таблицы a, (выберите max(adddate) adddate из таблицы, где table.title=a.title) b
Описание: запрос внешнего соединения (имя таблицы 1: имя таблицы 2: b)
SQL: выберите aa, ab, ac, bc, bd, bf из LEFT OUT JOIN b ON aa = bc
Описание: Запланируйте напоминание на пять минут вперед.
SQL: выберите * из расписания, где dateiff('минута',f время начала,getdate())>5
Описание: две связанные таблицы, удаление информации в основной таблице, которой нет во вторичной таблице.
SQL:
удалить из информации там, где она не существует (выберите * из infobz, где info.infid=infobz.infid)
проиллюстрирую:--
SQL:
ВЫБЕРИТЕ A.NUM, A.NAME, B.UPD_DATE, B.PREV_UPD_DATE
ИЗ ТАБЛИЦЫ 1,
(ВЫБЕРИТЕ X.NUM, X.UPD_DATE, Y.UPD_DATE PREV_UPD_DATE
ОТ (ВЫБЕРИТЕ NUM, UPD_DATE, INBOUND_QTY, STOCK_ONHAND
ИЗ ТАБЛИЦЫ 2
ГДЕ TO_CHAR(UPD_DATE,'ГГГГ/ММ') = TO_CHAR(SYSDATE, 'ГГГГ/ММ')) X,
(ВЫБЕРИТЕ NUM, UPD_DATE, STOCK_ONHAND
ИЗ ТАБЛИЦЫ 2
ГДЕ TO_CHAR(UPD_DATE,'ГГГГ/ММ') =
TO_CHAR(TO_DATE(TO_CHAR(SYSDATE, 'ГГГГ/ММ') || '/01','ГГГГ/ММ/ДД') - 1, 'ГГГГ/ММ')) ) Y,
ГДЕ X.NUM = Y.NUM (+)
AND X.INBOUND_QTY + NVL(Y.STOCK_ONHAND,0) <> X.STOCK_ONHAND ) B
ГДЕ А.НОМ = Б.НОМ
проиллюстрирую:--
SQL:
выберите * из информации о студенте, если она не существует (выберите * из информации о студенте, где Studentinfo.id=student.id) и название факультета ='"&strdepartmentname&"' и основное имя ='"&strprofessionname&"' в порядке сортировки по полу, месту происхождения студента, общему количеству колледжей балл на вступительном экзамене
проиллюстрировать:
Получить статистику телефонных счетов каждого подразделения за один год из базы данных (квота телефонных счетов, поздравления, телеграммы и список удобрений, источник из двух таблиц)
SQL:
ВЫБЕРИТЕ a.userper, a.tel, a.standfee, TO_CHAR(a.telfeedate, 'yyyy') AS telyear,
SUM(декодирование(TO_CHAR(a.telfeedate, 'mm'), '01', a.factration)) КАК ЯНВАРЬ,
SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '02', a.factration)) КАК ПТ,
SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '03', a.factration)) AS MAR,
SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '04', a.factration)) AS APR,
SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '05', a.factration)) КАК МОЖЕТ,
SUM(декодирование(TO_CHAR(a.telfeedate, 'mm'), '06', a.factration)) КАК JUE,
SUM(декодирование(TO_CHAR(a.telfeedate, 'mm'), '07', a.factration)) КАК ИЮЛ,
SUM(декодирование(TO_CHAR(a.telfeedate, 'mm'), '08', a.factration)) КАК AGU,
SUM(декодирование(TO_CHAR(a.telfeedate, 'mm'), '09', a.factration)) AS SEP,
SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '10', a.factration)) AS OCT,
SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '11', a.factration)) КАК НОЯБРЬ,
SUM(декодирование(TO_CHAR(a.telfeedate, 'mm'), '12', a.factration)) AS DEC
ОТ (ВЫБЕРИТЕ a.userper, a.tel, a.standfee, b.telfeedate, b.factration
ОТ TELFEESTAND a, TELFEE b
ГДЕ a.tel = b.telfax) a
GROUP BY a.userper, a.tel, a.standfee, TO_CHAR(a.telfeedate, 'гггг')
Описание. Задача совместного запроса к четырем таблицам:
SQL: выберите * из левого внутреннего соединения b на aa=bb, правого внутреннего соединения c на aa=cc внутреннего соединения d на aa=dd, где .....
Описание: Получить наименьший неиспользуемый идентификационный номер в таблице.
SQL:
SELECT (CASE WHEN EXISTS(SELECT * FROM Handle b WHERE b.HandleID = 1) THEN MIN(HandleID) + 1 ELSE 1 END) как HandleID
ОТ ручки
ГДЕ НЕ HandleID IN (ВЫБЕРИТЕ a.HandleID — 1 ИЗ Handle a)
2. Удалите повторяющиеся данные.
1. Случай наличия первичного ключа
а. Уникальный идентификатор поля (уникальный первичный ключ).
удалить таблицу
где идентификатора нет
(
выберите max(id) из группы таблиц по col1, col2, col3...
)
Поле, следующее за предложением group by, — это условие, которое вы используете для определения дублирования. Например, если есть только col1, то, пока содержимое поля col1 одинаково, это означает, что записи одинаковы.
б. Иметь общий первичный ключ.
Предположим, col1+','+col2+','...col5 является совместным первичным ключом.
выберите * из таблицы, где col1+','+col2+','...col5 в (
выберите max(col1+','+col2+','...col5) из таблицы
где, имея count(*)>1
группировать по столбцу 1, столбцу 2, столбцу 3, столбцу 4
)
Поле, следующее за предложением group by, — это условие, которое вы используете для определения дублирования. Например, если есть только col1, то, пока содержимое поля col1 одинаково, это означает, что записи одинаковы.
c: Судить по всем полям
выберите * в #aa из группы таблиц по id1,id2,....
удалить таблицу
вставить в таблицу
выберите * из #aa
2. Ситуация без первичного ключа
а: реализовано с использованием временных таблиц.
выберите идентификатор (int,1,1) в качестве идентификатора * в #temp из ta
удалить #temp
где идентификатора нет
(
выберите max(id) из # группы по col1, col2, col3...
)
удалить таблицу та
вставить в ta(...)
выберите ..... из #temp
б: Реализовано путем изменения структуры таблицы (добавление уникального поля)
изменить таблицу table добавить новое поле intidentity(1,1)
удалить таблицу
где Ньюфилда нет
(
выберите min(newfield) из группы таблиц по всем полям, кроме нового поля
)
изменить таблицу удалить столбец таблицы новое поле