Autor Zpráva
Medvídek
Profil
Chci se zeptat, jak nejlépe vybrat data ze tří tabulek, který navzájem nemají stejná data kromě jediného sloupce a to datumu.

Dejme tomu nějaký log událostí:

table logs
ID (int)
EVENT (INT)
DESC (TEXT)
SN (VARCHAR)
SOURCE (VARCHAR)
T (DATETIME)


table sms out
ID (int)
GATE (TININT)
PHONE (BIGINT)
TEXT (TEXT)
SEND (DATETIME)

table sms in
ID (int)
PHONE (BIGINT)
TEXT (TEXT)
RECIEVE (DATETIME)

A já bych potřeboval vybrat všechny záznamy ze všech třech tabulek a seřadit je dle data, ale i umě vybírat dle data a hodiny, tj podminky kdy datum bude větší než DATUM CAS atd.
Jediný, co sem se tak dočetl, tak asi řešit přes Temporary Table. Neexistuje i jiné řešení? Vyhovoval by mi UNION, ale hold nemam stejné sloupce.
AM_
Profil
Tak především to není šťastný návrh mít to ve třech tabulkách, s tím budeš mít vždycky jen trable, nejlepší by to bylo předělat do jedné.

To, co chceš, jde teoreticky přes pohled:
CREATE VIEW smsall AS
SELECT id, null AS phone, null AS messsage, T AS t FROM logs
UNION ALL
SELECT id, PHONE AS phone, TEXT AS message, SEND AS t FROM out
UNION ALL
SELECT id, PHONE AS phone, TEXT AS message, RECEIVE AS t FROM in
ale pro tvůj případ je to nevhodné, tam je opravdu jediné rozumné udělat to jako jednu tabulku.
Mít SQL tabulku/pohled/dotaz, kde bude mít každý řádek jiné typy/počet sloupců, odporuje základnímu principu relační DB.
Medvídek
Profil
AM
To je mi jasné, ale vládu na tabulkama nemám já, ale jiné aplikace. Šel sem nakonec cestou dočasné tabulky, což se mi zdá nejvhodnější, i ta filtrace poté bude jednoduší.
AM_
Profil
no než dočasnou tabulku to raději ten pohled, ten se jako tabulka chová a nemusíš ho aktualizovat.
Medvídek
Profil
AM:
Takže pokud sem to pochopil, tak vytvořim ten pohled (ten se dělá jen jednou?) a poté ten select už dělám přímo z toho pohledu.
EDIT:
Tak hotovo, moc díky za tip, neznal jsem a funguje skvěle :)

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0