Две таблицы

Работа VB и СУБД (Access, MSSQL, MySQL, Oracle и пр.)
Правила форума
При создании новой темы не забывайте указывать используемую СУБД.
JohnK
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 874
Зарегистрирован: 03.08.2002 (Сб) 0:35
Откуда: 48.02` 37.58`

Две таблицы

Сообщение JohnK » 23.05.2010 (Вс) 20:49

Есть две таблицы A и B? В таблице А хранятся товары склада. В таблице В хранятся все возможные товары. Как правильно с точки зрения программирования БД пометить в общем списке таблицы В товары которые есть в таблице А?
Я подхожу к этому методом перебора, проходить циклом по таблице А и помечать принадлежность в таблице В. Но думаю есть более оптимальные методы, так ли это?
SELECT * FROM girls WHERE tits NOT NULL AND age BETWEEN 18 AND 25 ORDER BY Beauty

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: Две таблицы

Сообщение iGrok » 23.05.2010 (Вс) 22:11

Так это же один sql-запрос...
update [B] set [отметка_наличия] = [обозначение_наличия] where [ид_товара] in (select [ид_товара] from [A])
label:
cli
jmp label

JohnK
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 874
Зарегистрирован: 03.08.2002 (Сб) 0:35
Откуда: 48.02` 37.58`

Re: Две таблицы

Сообщение JohnK » 23.05.2010 (Вс) 22:36

Да, но для этого мне нужно в цикле, опять таки, проходится по таблице товаров. А сама база может сопоставить товары имеющиеся на складе и общий список товаров. Другими словами можно ли сделать с таблицами что-то вроде логического ИЛИ ?

Немножко добавлю: у товара есть Название, и код принадлежности к месту. Вот кодом принадлежности и нужно пометить в общем списке товаров.
Т.е. весь процесс: 1)Берем первое значение (название товара)
2) смотрим в общей таблице
2а) если совпадает - помечаем в общей таблице кодом
3) NOT EOF goto 1
SELECT * FROM girls WHERE tits NOT NULL AND age BETWEEN 18 AND 25 ORDER BY Beauty

FireFenix
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1640
Зарегистрирован: 25.05.2007 (Пт) 10:24
Откуда: Mugen no Sora

Re: Две таблицы

Сообщение FireFenix » 23.05.2010 (Вс) 22:51

JohnK писал(а):Да, но для этого мне нужно в цикле, опять таки, проходится по таблице товаров. А сама база может сопоставить товары имеющиеся на складе и общий список товаров. Другими словами можно ли сделать с таблицами что-то вроде логического ИЛИ ?

Курим SQL запрос до просветления
iGrok писал(а):update [B] set [отметка_наличия] = [обозначение_наличия] where [ид_товара] in (select [ид_товара] from [A])
Птицей Гермеса меня называют, свои крылья пожирая... сам себя я укрощаю
私はヘルメスの鳥 私は自らの羽根を喰らい 飼い慣らされる

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: Две таблицы

Сообщение iGrok » 23.05.2010 (Вс) 23:30

А кодов принадлежности много?
Если он всего один - то курим мой запрос до просветления.

Если их бывает много разных, и тебе нужно установить соответствующий, то можно примерно так:
update b, a
set b.отметка_наличия = a.код_принадлежности
where b.название_товара = a.название_товара

В mysql это прокатывает, насчёт mssql не в курсе, но если и нет должен быть какой-то аналогичный вариант.
label:
cli
jmp label

JohnK
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 874
Зарегистрирован: 03.08.2002 (Сб) 0:35
Откуда: 48.02` 37.58`

Re: Две таблицы

Сообщение JohnK » 27.05.2010 (Чт) 2:32

Скорее всего это моя ошибка. Хотел упростить, а только запутал.

Есть список клиентов, у каждого клиента есть список телефонов , это общая для всех клиентов таблица (скажем А), в которой помечается ID клиента (принадлежность телефона конкретному клиенту)
И есть общая база телефонов в которой информация меняется каждую неделю (и поэтому нельзя прямо в ней указывать ID клиента), назовем ее Таблица В.
Так вот нужно при каждом изменении в списке телефонов клиентов (табл. А) сопостовлять ID и в этой общей таблице В.
Как грамотно это реализовать?

PS. Надеюсь никого не запутал 8-))
PPS. На данный момент работает фактически методом перебора и это не серьезно, как по мне....

Спасибо заранее!
SELECT * FROM girls WHERE tits NOT NULL AND age BETWEEN 18 AND 25 ORDER BY Beauty

FireFenix
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1640
Зарегистрирован: 25.05.2007 (Пт) 10:24
Откуда: Mugen no Sora

Re: Две таблицы

Сообщение FireFenix » 27.05.2010 (Чт) 7:57

Так тебе сопоставить и вывести или обновить записи?

вывести можно
Код: Выделить всё
SLECT tel.* FROM tel, uesr WHERE user.id=tel.user_id;

или
Код: Выделить всё
SLECT * FROM tel LEFT JOIN user ON user.id=tel.user_id;


если обновить - то код iGrok'a
iGrok писал(а):update [B] set [отметка_наличия] = [обозначение_наличия] where [ид_товара] in (select [ид_товара] from [A])

или он же в виде моих примеров
Код: Выделить всё
UPDATE tel SET in_store="True" WHERE tel.user_id IN (SELECT user.id FROM user)
Птицей Гермеса меня называют, свои крылья пожирая... сам себя я укрощаю
私はヘルメスの鳥 私は自らの羽根を喰らい 飼い慣らされる

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: Две таблицы

Сообщение iGrok » 27.05.2010 (Чт) 14:24

Тебе нужно в таблицу B записать значения ID пользователя из таблицы A, при этом таблицы должны сопоставляться по номеру телефона?

Для MySQL:
Код: Выделить всё
UPDATE B, A
SET B.ID = A.ID
WHERE B.PHONE_NUM = A.PHONE_NUM


Если у тебя не мускул, а mssql - ищи аналог этого запроса. Он 100% есть.

UPD: Гугль говорит, что в mssql это должно быть так:
Код: Выделить всё
UPDATE B
SET B.ID = A.ID
FROM B, A
WHERE B.PHONE_NUM = A.PHONE_NUM



Если тебе нужно что-то другое - давай структуру таблиц. Список нужных таблиц и нужных полей. Плюс связи, плюс что куда должно записаться.
label:
cli
jmp label

JohnK
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 874
Зарегистрирован: 03.08.2002 (Сб) 0:35
Откуда: 48.02` 37.58`

Re: Две таблицы

Сообщение JohnK » 27.05.2010 (Чт) 14:53

Спасибо большое, буду пробывать!
SELECT * FROM girls WHERE tits NOT NULL AND age BETWEEN 18 AND 25 ORDER BY Beauty


Вернуться в Базы данных

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 138

    TopList  
cron