Mysql Joins - Как узнать, какая строка извлекается из какой таблицы ...? - PullRequest
0 голосов
/ 15 апреля 2010

Подумайте, я использую соединение трех таблиц, чтобы получить желаемый набор результатов ...

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

Обновление: Я вижу, что я сформулировал вопрос довольно неправильно .... Как указано в одном из ответов ниже, набор результатов, возвращаемый объединением, может содержать строку, составленную из нескольких столбцов ...

Таким образом, вопрос на самом деле должен звучать так: «Предположим, я использую объединение трех таблиц, чтобы получить желаемый набор результатов ...»

Ответы [ 2 ]

5 голосов
/ 15 апреля 2010

Вы можете добавить столбец идентификатора таблицы к каждому:

select 'A' as table_name, col1, col2 from A
union
select 'B' as table_name, col1, col2 from B
union
...

Возвращает один результирующий набор, который обрабатывается вашим приложением как обычный оператор выбора:

while ( rows available ) {
  row = fetchrow
  if row.table_name == 'A' then 
     do special handling for table A
  else if row.table_name == 'B' then
     do special handling for table B
  else if ...

}

Фактический синтаксис зависит от языка, который вы используете, но большинство процедурных языков следуют схеме выше.

3 голосов
/ 15 апреля 2010

Если вы задаете этот вопрос, то ваша база данных, вероятно, не правильно структурирована. (правильно является субъективным термином).

Правильный SQL-запрос к нормализованной базе данных не должен зависеть или не интересоваться, откуда поступают данные.

Каждая строка будет представлять собой комбинацию всех таблиц, с пустыми значениями, вставляемыми в столбцы для левых / правых / внешних объединений, которые не соответствуют критериям объединения. Возможно, вы могли бы проверить, является ли столбец (из определенной таблицы) нулевым, и получить из него, что ненулевые значения должны происходить из противоположных таблиц.

Опять же, если вы действительно выполняли UNION, как предложил Марсело, вам пришлось бы посмотреть на вспомогательные столбцы, чтобы определить источник данных, так как эта информация теряется в комбинации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...