Tylko z dynamicznym SQL. Możliwe jest również pozostawienie łączenia wielu różnych tabel i użycie CASE na podstawie typu, ale wszystkie tabele muszą być znane z góry.
Łatwiej byłoby polecić odpowiedni projekt, gdybyśmy wiedzieli więcej o tym, co próbujesz osiągnąć, jak wygląda twój projekt i dlaczego wybrałeś właśnie ten konkretny projekt stołu.
Say you have a table of foods:
id INT
foodtype VARCHAR(50) (right now it just contains 'hotdog' or 'hamburger')
name VARCHAR(50)
Then hotdogs:
id INT
length INT
width INT
Then hamburgers:
id INT
radius INT
thickness INT
Normalnie bym polecić jakiś system ograniczający tylko jeden stół pomocniczy istnieć, ale dla uproszczenia, że wyjeżdżam na zewnątrz.
SELECT f.*, hd.length, hd.width, hb.radius, hb.thickness
FROM foods f
LEFT JOIN hotdogs hd
ON hd.id = f.id
AND f.foodtype = 'hotdog'
LEFT JOIN hamburgers hb
ON hb.id = f.id
AND f.foodtype = 'hamburger'
Teraz widać, że coś takiego może być wygenerowany kod (lub nawet na bardzo powolnym prototypu dynamicznego SQL w locie) od SELECT DISTINCT foodtype FROM foods
podanych pewnych założeń dotyczących nazw tabel oraz dostęp do metadanych tabeli.
Problem polega na tym, że ostatecznie każdy, kto zużyje wynik tego zapytania, będzie musiał pamiętać o nowych kolumnach pojawiających się po dodaniu nowej tabeli.
W związku z tym pytanie wraca do klienta/konsumenta danych - w jaki sposób poradzi sobie z różnymi typami? A co to znaczy, że różne typy znajdują się w tym samym zestawie? A jeśli trzeba wiedzieć o różnych typach, jaka jest wada pisania różnych zapytań dla każdego typu lub zmieniania ręcznego zapytania, gdy nowe typy są dodawane ze względu na względny wpływ takiej zmiany?
wydaje się, że jest to bardziej problem z projektowaniem - w jaki sposób będziesz kiedykolwiek wymuszać integralną integralność, jeśli nie znasz swoich połączeń do czasu wykonania? – tomfumb