| | |
| Stránka: 1 z 1
| [ Príspevkov: 10 ] | |
Autor | Správa |
---|
Registrovaný: 10.11.11 Prihlásený: 04.08.17 Príspevky: 21 Témy: 5 |
Vedel by mi niekto poradiť s týmto. Mam tri tabuľky: A (idA, nameA) B (idB, nameB) AB (idA, idB) Potrebujem upraviť dotaz, ktorým by som vedel vytiahnuť dáta z tab. A, s tým, že potrebujem tam zahrnúť podmienku nerovnosti. Napríklad: zobraz všetky záznamy z tabuľky A okrem, tých (napr.: nameB != ‘xxx’ ) uvedených v podmienke WHERE. Kód: SELECT * FROM A LEFT JOIN (AB, B) ON (A.idA = AB.idA AND B.idB = AB.idB) WHERE B.nameB != “xxx“
|
|
Registrovaný: 08.08.09 Príspevky: 12449 Témy: 39 | Napísal killer: 16.07.2017 20:32 | |
|
To čo máš ti nefunguje? Kód: SELECT A.* FROM A LEFT JOIN AB ON AB.idA = A.idA LEFT JOIN B ON AB.idB = B.idB WHERE B.nameB != "xxx"
_________________ always is always wrong |
|
Registrovaný: 10.11.11 Prihlásený: 04.08.17 Príspevky: 21 Témy: 5 | Napísal autor témy lukas15: 16.07.2017 20:54 | |
|
Funguje, ale nie korektne. Dotaz vráti jeden záznam z tab. A viackrát (podľa počtu záznamov idA v tab. AB)
|
|
Registrovaný: 08.08.09 Príspevky: 12449 Témy: 39 | Napísal killer: 16.07.2017 21:00 | |
|
Pridaj si na koniec Kód: GROUP BY A.idA
_________________ always is always wrong |
|
Registrovaný: 10.11.11 Prihlásený: 04.08.17 Príspevky: 21 Témy: 5 | Napísal autor témy lukas15: 16.07.2017 21:39 | |
|
Keď tam dám GROUP BY, tak to síce nevyhodí viackrát jeden záznam, ale tá podmienka, aby nezobrazil ('xxx') záznam, funguje len vtedy, ak je v tab. AB len jeden záznam pre hodnotu odkazujúcu na xxx v tab. B. Ak sú v tab. AB napr. dve hodnoty, ktoré odkazujú na idA=1 hodnoty xxx a yyy (tab. B), tak dotaz vyhodí záznam idA=1, aj keď by nemal. Neviem, či som to napísal zrozumiteľne
|
|
Registrovaný: 27.07.07 Príspevky: 3948 Témy: 51 Bydlisko: Bratislava |
Najlepsie bude, ak uvedies nejake vzorove data a zelany vysledok
_________________ NTB: Acer Aspire 4820TG 14" | CPU: Intel Core i5 2,53 GHz | VGA: ATI Mobility Radeon HD5650 1GB | RAM: 8GB DDR3 1066 MHz | HDD: 1TB SSD WD BLUE |
|
Registrovaný: 10.11.11 Prihlásený: 04.08.17 Príspevky: 21 Témy: 5 | Napísal autor témy lukas15: 20.07.2017 18:13 | |
|
Potrebujem vypísať napríklad: všetkých užívateľov ktorý nemajú kontakt 222. V tomto prípade by malo vypísať len users: Jano.
|
|
Registrovaný: 17.07.11 Prihlásený: 29.12.20 Príspevky: 1516 Témy: 3 | Napísal BX: 20.07.2017 23:24 | |
|
Kód: select u.name, u.id from users u left join user_contacts uc on (u.id = uc.id_user) left join contacts c on (uc.id_contact = c.id) where u.id not in ( select uc2.id_user from user_contacts uc2 left join contacts c2 on (uc2.id_contact = c2.id) where c2.number = '222' ) group by u.id, name Najoinujem všetko dohromady a odstránim všetky riadky, ktoré nechcem - v tomto prípade všetkých užívateľov, pri ktorých nájdem číslo 222.
_________________ Na súkromné správy týkajúce sa problémov, ktoré sa riešia vo fóre, neodpovedám! |
|
Registrovaný: 19.05.08 Prihlásený: 23.04.24 Príspevky: 664 Témy: 28 Bydlisko: Slovensko |
Kód: SELECT * from Users U where U.idUsers not in ( SELECT U_in.idUsers as innerID FROM [Users] U_in LEFT JOIN users_has_contacts UC on UC.idUser = U_in.idUsers LEFT JOIN Contacts C on C.idContacts = UC.idContacts where Number = 222 group by U_in.idUsers) EDIT: BX dal nieco podobne, ale takto nie si obmedzeny pomocou group by, ten vzdy radsej vo vnoreni aby si sa neobmedzoval na stlpce zadefinovane v group by (to ta trapi pri tabulkach s 30+ stlpcami)
|
|
Registrovaný: 10.11.11 Prihlásený: 04.08.17 Príspevky: 21 Témy: 5 | Napísal autor témy lukas15: 21.07.2017 18:19 | |
|
Vďaka. Funguje to. Presne toto som potreboval.
|
|
| Stránka: 1 z 1
| [ Príspevkov: 10 ] | |
| Nemôžete zakladať nové témy v tomto fóre Nemôžete odpovedať na témy v tomto fóre Nemôžete upravovať svoje príspevky v tomto fóre Nemôžete mazať svoje príspevky v tomto fóre
|
|