2012-04-29 3 views
4

Непосредственно под этим небольшим вводом вы увидите макет таблиц базы данных, с которыми я работаю, и вы увидите подробности моего вопроса. Пожалуйста, предоставьте как можно больше рекомендаций. Я все еще изучаю PHP и SQL, и я действительно ценю вашу помощь, поскольку я получаю это от этого.PostgreSQL Query and PHP Assistance

Таблица One ('БСП') - chp_cd rgn_no bgu_cd work_state

Таблица Two ('chapterassociation') - chp_cd rgn_no bgu_cd work_state Тип

базы данных: PostgreSQL

Я пытаюсь сделать следующее с этими двумя таблицами, и я думаю, что это ПРИСОЕДИНЕНИЕ, что я должен сделать, но я не Я хорошо знаком с этим, и я пытаюсь учиться. Пока я создал запрос для выбора набора данных из этих таблиц, чтобы запрос не выполнялся на всей базе данных. Теперь с выбранными данными я пытаюсь сделать следующее ...

Прежде всего, 'work_state' таблицы one ('bue') следует проверять на 'work_state' таблицы 2 ('chapterassociation'). Как только совпадение найдено, 'bgu_cd' таблицы 1 ('bue') следует сопоставить с 'bgu_cd' таблицы 2 ('chapterassociation'). Когда оба совпадения найдены, он всегда будет указывать на уникальную строку во второй таблице («chapterassociation»). Используя эту уникальную строку во второй таблице («chapterassociation»), значения «rgn_no» и «chp_cd» должны быть ОБНОВЛЕНО в первой таблице («bue»), чтобы соответствовать значениям во второй таблице («chapterassociation»).

Я знаю, что это, вероятно, много спрашивает, но если кто-то может помочь мне построить запрос, чтобы сделать это, было бы замечательно! Я действительно хочу учиться, потому что я не хочу быть невежественным в этом навсегда. Хотя я не уверен, полностью ли понимаю, как работает JOIN и сравнение.

Если я прав, мне придется поместить это в отдельные запросы, которые затем будут в PHP. Так, например, вероятно, будет несколько инструкций IF ELSE, которые заканчиваются окончательным результатом окончательного запроса, который обновляет значения из таблицы 2 в таблицу.

ответ

3

объединение будет делать как уровень соответствия для вас ...

bue 
INNER JOIN 
    chapterassociation 
    ON bue.work_state = chapterassociation.work_state 
    AND bue.bgu_cd  = chapterassociation.bgu_cd 

Фактический алгоритм определяется PostreSQL. Это может быть слияние, использование хэшей и т. Д., И зависит от индексов и других статистических данных. Но вам не нужно беспокоиться об этом напрямую, тезисы SQL, которые вам нужны.

Тогда вам просто нужен механизм для записи данных из одной таблицы в другой ...

UPDATE 
    bue 
SET 
    rgn_no = chapterassociation.rgn_no, 
    chp_cd = chapterassociation.chp_cd 
FROM 
    chapterassociation 
WHERE bue.work_state = chapterassociation.work_state 
    AND bue.bgu_cd  = chapterassociation.bgu_cd 
+0

Стандарт SQL не включает спецификацию ЕКА на операторе UPDATE. Многие продукты баз данных поддерживают его как расширение, но при отсутствии стандарта детали реализации различаются. Этот ответ включал правильный код для MS SQL Server (и, возможно, некоторые другие продукты), но вопрос был конкретно о PostgreSQL. В PostgreSQL, если вы повторяете имя таблицы из инструкции UPDATE в предложении FROM, это самосоединение и не будет делать то, что пользователь хочет здесь. Отредактирован ответ на правильный синтаксис PostgreSQL. – kgrittn