Объединение в 1 столбец через 4 таблицы - Mysql - PullRequest
0 голосов
/ 25 апреля 2011

Я перебираю некоторый SQL, который я написал недавно, который объединяет 4 таблицы в общем столбце идентификаторов. Я становлюсь немного параноиком по поводу моего присоединения, и я надеюсь, что кто-то может просто прояснить для меня эту простую концепцию:

SELECT A.adata, B.bdata, C.cdata, D.ddata 
FROM taba A, tabb B, tabc C, tabd D
WHERE A.id=B.id AND B.id=C.id AND C.id=D.id
AND A.id=C.id AND A.id=D.id AND B.id=D.id

Нужны ли мне все эти предложения AND, или я могу исключить последние 3, например:

SELECT A.adata, B.bdata, C.cdata, D.ddata 
FROM taba A, tabb B, tabc C, tabd D
WHERE A.id=B.id AND B.id=C.id AND C.id=D.id

Несмотря на то, что я успешно протестировал меньший запрос в моем наборе данных, и он, похоже, дает тот же результат, я не хочу, чтобы какой-то неполный SQL возвращался, чтобы преследовать меня. С другой стороны, я не хочу загружаться на ненужных условиях. Дайте мне знать, если я смогу предоставить дополнительную информацию.

- ОБНОВЛЕНИЕ, спасибо всем за ответы. О таблицах: они относительно статичны, хотя некоторые значения в строках меняются в течение дня. Каждая таблица A, B, C, D хранит различную информацию о OBJECT, и идентификатор OBJECT является общим для всех 4, поэтому здесь все очень просто.

Ответы [ 3 ]

0 голосов
/ 25 апреля 2011

Лучшим решением для облегчения чтения является использование синтаксиса соединения ISO / ANSI:

Select A.adata, B.bdata, C.cdata, D.ddata 
From taba As A
    Inner Join tabb As B
        On B.id = A.id
    Inner Join tabc As C
        On C.id = B.id
    Inner Join tabd As D
        On D.id = C.Id
0 голосов
/ 25 апреля 2011

Я согласен, что вы должны использовать синтаксис INNER JOIN, чтобы было легче следовать.

Но вы также должны помнить, что эти предложения AND могут использоваться оптимизатором. Не зная, как устроены ваши столы, я не могу сказать наверняка. Но в целом, если вы скажете базе данных присоединиться на основе двух столбцов, она попытается использовать индексы, если они существуют. Если вы замените те, которые используют «транзитивное свойство», то вы можете замедлить выполнение запроса.

Просто предупреждение. Это зависит от вашей конкретной структуры таблицы.

Если вы проверили его, и он работает так же быстро, это может быть хорошо. Но растут ли таблицы? Может ли он со временем потерпеть неудачу? Я был бы обеспокоен этим и протестировал его с очень большими таблицами, прежде чем вносить изменения.

0 голосов
/ 25 апреля 2011

Ваша вторая версия использует переходное отношение между столбцами таблицы.

Проще думать об этом было бы.

A = 1, B = A, следовательно B = 1

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