У меня есть целая куча таблиц:Multiple слева присоединяется к одной таблице
Table1: PersonID, A1, A2, A3, ...
Table2: PersonID, B1, B2, B3, ...
Table3: PersonID, C1, C2, C3, ...
Table4: PersonID, D1, D2, D3, ...
...
Table1 является особенным, как это на самом деле содержат все лиц (имена и личные данные), но все остальные таблицы почти наверняка отсутствующие строки (человек просто не участвовал в этом событии).
Что я хотел бы сделать, это объединить все таблицы вместе (общим личным идентификатором), чтобы любые отсутствующие атрибуты просто оставались пустыми. Поэтому, конечно, я думал использовать внешние соединения. Это то, что я пробовал:
SELECT *
FROM Table1, Table2, Table3, Table4, Table5, Table6
LEFT OUTER JOIN Table2 ON Table1.PersonID = Table2.PersonID
LEFT OUTER JOIN Table3 ON Table1.PersonID = Table3.PersonID
LEFT OUTER JOIN Table4 ON Table1.PersonID = Table4.PersonID
LEFT OUTER JOIN Table5 ON Table1.PersonID = Table5.PersonID
LEFT OUTER JOIN Table6 ON Table1.PersonID = Table6.PersonID
Все это дает мне перегрузку памяти. Я думаю, что я как-то принимаю декартово произведение всех моих столов, и это задыхается. Есть ли хороший способ сделать это?
Заранее благодарен!
Такая простая вещь .... Спасибо за быстрый ответ! Ну, теперь почти отлично работает, проблема в том, что я не получаю столько же строк на выходе, как я и ожидал. В таблице 1 содержится около 1000 строк, поэтому, поскольку все остается присоединенным к нему, результат тоже должен иметь 1000 строк, но я получаю около 900 строк. Очень возможно, что существует ~ 100 люди, которые ничего не участвовали, но я подумал бы тогда, что каждое поле будет просто NULL. Не так ли? – mstobb
Можете ли вы привести пример строки, которая опускается. –
Я думаю, что эта новая проблема связана с программным обеспечением. Libre Base менее совершенна во многих отношениях. Когда я подсчитываю количество строк непосредственно с новым запросом, я получаю правильный номер. Очень странно. Спасибо за помощь! – mstobb