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
2 odpowiedzi
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
);
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
Podobne pytania
Nowe pytania
sql
Structured Query Language (SQL) to język służący do wykonywania zapytań w bazach danych. Pytania powinny zawierać przykłady kodu, strukturę tabeli, przykładowe dane i znacznik używanej implementacji DBMS (np. MySQL, PostgreSQL, Oracle, MS SQL Server, IBM DB2 itp.). Jeśli Twoje pytanie dotyczy wyłącznie konkretnego DBMS (używa określonych rozszerzeń / funkcji), użyj zamiast tego tagu tego DBMS. Odpowiedzi na pytania oznaczone tagiem SQL powinny używać standardu SQL ISO / IEC.