Autor Téma: Dve podmienky v jednom SQL. Mám ich v dvoch.  (Přečteno 302 krát)

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 3231
  • Karma: 30
    • Verze Delphi: XE7 professional
Dve podmienky v jednom SQL. Mám ich v dvoch.
« kdy: 18-12-2017, 14:02:36 »
Ide to spojiť do jedného SQL? Okrem subselectu, ktorý vlastne mám teraz.
Kód: [Vybrat]
// DEPOSIT_LF_2_VIEW

SELECT DL.DATEFROM, DL.DATETO, DL.FKFLAT, LF.DATEFROM AS LFFROM,
       COALESCE(LF.DATETO, CAST('30.11.2016' AS DATE)) AS LFTO
FROM DEPOSIT_LF_FIRST_VIEW DL
     INNER JOIN LANDLORD_FLAT LF ON (DL.FKL_F = LF.IDLANDLORD_FLAT)
WHERE
  DL.DATETO >= LF.DATEFROM

// DEPOSIT_LF_3_VIEW
SELECT DL.DATEFROM, DL.DATETO, DL.LFFROM, DL.LFTO
FROM DEPOSIT_LF_2_VIEW DL
WHERE
  DL.DATEFROM <= DL.DATETO
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline Miroslav Baláž

  • Plnoletý
  • ***
  • Příspěvků: 223
  • Karma: 6
    • Verze Delphi: D1,2,3,4,7,2005,2009, XE8,S,B,T10.2.2 Pro
Re:Dve podmienky v jednom SQL. Mám ich v dvoch.
« Odpověď #1 kdy: 18-12-2017, 15:12:15 »
Nie je jasné, či potrebuješ 2 x JOIN? Pre tie veľké písmená podklad ťažko čítam.
Obecne:
Kód: MySQL [Vybrat]
  1.   ( Acka AS a
  2.     INNER JOIN
  3.     Bcka AS b
  4.       ON a.P1=b.P1
  5.   )
  6.   Ccka AS c
  7.     ON a.P2=c.P1

alebo aj:
Kód: MySQL [Vybrat]
  1.   ( Acka AS a
  2.     INNER JOIN
  3.     Bcka AS b
  4.       ON a.P1=b.P1
  5.   )
  6.   Ccka AS c
  7.     ON   a.P2=c.P1
  8.          and
  9.          b.P2=c.P2
  10.  
Iná varianta je použiť zátvorky z opačného konca.
Where samozrejme pridáš ešte podľa potreby na záver.

« Poslední změna: 18-12-2017, 15:17:20 od mibainfo »

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 3231
  • Karma: 30
    • Verze Delphi: XE7 professional
Re:Dve podmienky v jednom SQL. Mám ich v dvoch.
« Odpověď #2 kdy: 18-12-2017, 15:19:57 »
V prvom SQL 2_view použijem prvú podmienku, výsledok použijem v druhom SQL 3_view ako zdroj a uplatním druhú podmienku. A to sa mi nepáči. Ja som ich nedokázal dať naraz obe do 2_view.
Jednoducho vyhadzujem z datasetu záznamy mimo povolený rozsah dátumov. Ten rozsah sa mení.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline Miroslav Baláž

  • Plnoletý
  • ***
  • Příspěvků: 223
  • Karma: 6
    • Verze Delphi: D1,2,3,4,7,2005,2009, XE8,S,B,T10.2.2 Pro
Re:Dve podmienky v jednom SQL. Mám ich v dvoch.
« Odpověď #3 kdy: 18-12-2017, 15:38:54 »
Ide to spojiť do jedného SQL? Okrem subselectu, ktorý vlastne mám teraz.
Kód: MySQL [Vybrat]
  1. // DEPOSIT_LF_2_VIEW
  2. SELECT DL.DATEFROM, DL.DATETO, DL.FKFLAT, LF.DATEFROM AS LFFROM, COALESCE(LF.DATETO, CAST('30.11.2016' AS DATE)) AS LFTO
  3.   FROM DEPOSIT_LF_FIRST_VIEW DL
  4.        INNER JOIN
  5.        LANDLORD_FLAT LF
  6.          ON (DL.FKL_F = LF.IDLANDLORD_FLAT)
  7.   DL.DATETO >= LF.DATEFROM
  8.  
  9. // DEPOSIT_LF_3_VIEW
  10. SELECT DL.DATEFROM, DL.DATETO, DL.LFFROM, DL.LFTO
  11.   FROM DEPOSIT_LF_2_VIEW DL
  12.   WHERE DL.DATEFROM <= DL.DATETO
Vidim jedno rovnako funkcne WHERE, len inak zapisane.
Zapis c.2 voci zapisu c.1 nic naviac neriesi.. Alebo som uz unaveny?

Mozno si mal na mysli nieco taketo?
Kód: MySQL [Vybrat]
  1. Where Datum Between ( Dolny, Horny )
PS
Pre kod SQL pouzi radsej Zvyraznenie syntaxe / MySQL. Lahsie sa to potom lusti
« Poslední změna: 18-12-2017, 15:55:27 od mibainfo »

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 3231
  • Karma: 30
    • Verze Delphi: XE7 professional
Re:Dve podmienky v jednom SQL. Mám ich v dvoch.
« Odpověď #4 kdy: 18-12-2017, 17:28:58 »
Citace
Zapis c.2 voci zapisu c.1 nic naviac neriesi.. Alebo som uz unaveny?
To druhé ;)
Prvý dopyt vyhadzuje záznamy s dátumom pred povoleným rozsahom, druhý s dátumom po rozsahu. Ide mi len o to, že takto zbehnú dva cykly nad celým datasetom. Jeden cyklus by sa mi páčil viac.
Kód: [Vybrat]
Where Datum Between ( Dolny, Horny ) Problém je v tom, že zakaždým pracujem s iným dátumom. Ale asi sa bude dať použiť konštrukcia  ... Between() OR Between() ... Dopredu vďaka za nakopnutie.
 
« Poslední změna: 18-12-2017, 17:34:23 od Stanislav Hruška »
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 2059
  • Karma: 104
    • Verze Delphi: D2007, XE3, DX10
Re:Dve podmienky v jednom SQL. Mám ich v dvoch.
« Odpověď #5 kdy: 18-12-2017, 17:41:49 »
Pre kod SQL pouzi radsej Zvyraznenie syntaxe / MySQL. Lahsie sa to potom lusti
No vubec nejlepe je vytvorit SSCCE ve fiddleru (viz http://sqlfiddle.com/#!9/a6c585/1), kde budou jen data, kde nebude zadny balast okolo a budou tam je data relevantni pro zkoumany problem, aby kazdy, kdo ma chut se na problem podivat to mohl udelat s co nejnizsi barierou

Offline Miroslav Baláž

  • Plnoletý
  • ***
  • Příspěvků: 223
  • Karma: 6
    • Verze Delphi: D1,2,3,4,7,2005,2009, XE8,S,B,T10.2.2 Pro
Re:Dve podmienky v jednom SQL. Mám ich v dvoch.
« Odpověď #6 kdy: 18-12-2017, 17:58:35 »
Suhlas, pretoze ked vidim aj data, hned sa lepsie rozmysla:)
« Poslední změna: 18-12-2017, 18:01:21 od mibainfo »

 

S rychlou odpovědí můžete používat BB kódy a emotikony jako v běžném okně pro odpověď, ale daleko rychleji.

Upozornění: do tohoto tématu bylo naposledy přispěno před 120 dny.
Zvažte prosím založení nového tématu.

Jméno: E-mail:
Ověření:
Kolik je šest plus čtyři (slovem):