extra1, extra2, ...
är "extra kolumner" i korstabellsterminologi.
Manualen för tablefunc-modulen
förklarar reglerna:
Och längre ner:
Djärv betoning på nyckeldelarna av mig.
Du sorterar bara efter row_name
:
ORDER BY row_name ASC
Spelar ingen roll i det första exemplet där du filtrerar med:
WHERE ... t.extra1 = 'val1' -- single quotes by me
Alla inmatningsrader har extra1 = 'val1'
i alla fall. Men det spelar roll i det andra exemplet där du filtrerar med:
WHERE ... t.extra1 IN('val1', ...) --> More values
Nu överträds det första kravet i fetstil ovan för den extra kolumnen extra1
. Medan sorteringsordningen för den första inmatningsfrågan är icke-deterministisk, resulterar värden för "extra" kolumnen extra1
väljs godtyckligt. De fler möjliga värdena för extra1
, desto färre rader kommer att ha 'val1':det är vad du observerade.
Du kan fortfarande få det att fungera:att rapportera extra1 = 'val1'
för varje row_name
som har minst en av dessa, ändra ORDER BY
till:
ORDER BY row_name, (extra1 <> 'val1')
Sorterar "val1" överst. Förklaring till den boolean
uttryck (med länkar till fler):
Andra "extra" kolumner väljs fortfarande godtyckligt medan sorteringsordningen inte är deterministisk.
Grundläggande om korstabell: