Mam następującą tabelę w MS Access:

FID FNAME                 SID   FBOOL
14  A11111_1111111_1.png    5   false
15  A11111_1111111_15.png   5   true
16  A11111_1111111_16.png   5   false
17  A11111_1111111_17.png   5   false
18  A1123_2345_1.png        7   false
19  A1123_2345_19.png       7   false
20  A1123_2345_20.png       7   false
 3  A111_111_1.bmp          8   true
10  A111_111_4.bmp          8   true
21  A111_111_13.png         8   false
31  A1123_2345_1.png        9   false
32  A1123_2345_19.png       9   false
33  A1123_2345_20.png       9                 <=EMPTY Value
34  A1123_2345_1.png        10                <=EMPTY Value
35  A1123_2345_19.png       10                <=EMPTY Value
36  A1123_2345_20.png       10                <=EMPTY Value
44  A1123_2345_20.png       11  true          
45  A1123_2345_1.png        11  false       
46  A1123_2345_19.png       11                <=EMPTY Value
47  A1123_2345_20.png       11  true

Chciałbym wyodrębnić za pomocą SQL FID w następujący sposób:

15  A11111_1111111_15.png   5   true
20  A1123_2345_20.png       7   false
10  A111_111_4.bmp          8   true
33  A1123_2345_20.png       9                 <=EMPTY Value
36  A1123_2345_20.png       10                <=EMPTY Value
47  A1123_2345_20.png       11  true     

To będzie podzapytanie, więc nie mogę użyć UNION. (Próbowałem z UNION, ale daje: „ta operacja nie jest dozwolona w podzapytaniach”)

Nagłówek SirData to:

SID PNumber SNumber STitle  STime   SNote  //SID is the primary key

Nagłówek SirFoto to:

FID FNAME  SID   FBOOL  //the SID is a foreign key, FID is primary key

Moje zapytanie wygląda następująco:

SELECT SirData.SID, SirData.PNumber, SirData.SNumber, SirData.STitle, SirData.STime, SirData.SNote, FOTO.FID, FOTO.FNAME FROM SirData LEFT JOIN ( Select SID, FID, FNAME FROM SirFoto where FID IN  (  Select MAX(FID) from SirFoto group by SID  order by MAX(FBOOL) desc, MAX(FID) desc   //I tried like this, but is incorrect !)  )  FOTO ON SirData.SID = FOTO.SID where SirData.PNumber=\  selectedprc  \   order by SirData.PNumber ASC, SirData.SNumber ASC
1
Molnar Istvan 17 marzec 2020, 12:05

2 odpowiedzi

Najlepsza odpowiedź

Wydaje się, że chcesz mieć najnowszy wiersz z preferencją „prawda”. To sugeruje:

select sf.*
from SirFoto as sf
where sf.fid = (select top (1) sf2.fid
                from SirFoto as sf2
                where sf2.sid = sf.sid and
                order by iif(sf2.fbool, 'true', 1, 2),
                         sf2.id desc
               );
1
Gordon Linoff 17 marzec 2020, 10:57

Skończyło się na tym kodzie:

SELECT SirData.SID, SirData.PNumber, SirData.SNumber, SirData.STitle, SirData.STime, SirData.SNote, FOTO2.FID, FOTO2.FNAME, FOTO2.FBOOL FROM SirData LEFT JOIN (SELECT FOTO.FID, FOTO.FNAME, FOTO.FBOOL, FOTO.SID FROM SirFoto as FOTO WHERE FOTO.FID IN (SELECT top 1 sf2.FID FROM SirFoto as sf2 WHERE sf2.SID = FOTO.SID ORDER BY IIF (sf2.FBOOL = 'true', 1, 2 ), sf2.FID desc)) FOTO2 ON SirData.SID = FOTO2.SID WHERE Sirdata.PNumber = \ "" + selectedprc + "\" zamówienie według Sirdata.PNumber ASC, Sirdata.SNumber ASC

0
Molnar Istvan 17 marzec 2020, 14:10