Is SQL in staat om iets in de trant van dit te doen: SELECT * FROM table WHERE column = everything
Antwoord 1, autoriteit 100%
Voor iedereen die de kolomnaam NODIG HEEFT in de query om welke reden dan ook (waarschijnlijk dynamische SQL), zou een mooi alternatief zijn SELECT * FROM table WHERE column = column
Dit lijkt erg op WHERE 1=1
, maar het bevat de kolomnaam, die voor mijn oplossing nodig was, en misschien ook voor een paar andere.
Antwoord 2, autoriteit 88%
SELECT * FROM table
Als u SQL dynamisch genereert, is het
SELECT * FROM table WHERE 1=1
Met de tijdelijke aanduiding 1=1
kunt u alle records retourneren of een werkelijke voorwaarde vervangen als u een subset retourneert of aanvullende voorwaardelijke instructies nodig hebt.
Zie ook
Waarom zou iemand WHERE 1 gebruiken =1 EN <voorwaarden> in een SQL-clausule?
Antwoord 3, autoriteit 62%
Uw vraag laat drie interpretaties toe:
- Je geeft niet om de kolom: laat het uit de waar-clausule vallen (of laat de waar-clausule helemaal vallen, als dit de enige bijzin was)
- Je wilt dat de kolom wordt ingesteld, maar het maakt je niet uit wat: Gebruik
WHERE column IS NOT nULL
- U wilt een zoekopdracht die ook alle records van een eenvoudig SQL-sjabloon kan weergeven:
SELECT * FROM table WHERE column LIKE '%$searchterm%'
Antwoord 4, autoriteit 26%
Alles of iets?
Je zou een jokerteken kunnen gebruiken, denk ik.
SELECT * FROM table WHERE column LIKE "%"
Antwoord 5, autoriteit 21%
U kunt de kolomnaam zelf gebruiken in uw zoekopdracht:
SELECT * FROM TABLE WHERE COLUMN = COLUMN
bijvoorbeeld:
SELECT * FROM Student WHERE YEAR = YEAR
of door een hulpparameter te gebruiken:
SELECT * FROM Student WHERE YEAR = (CASE WHEN @year IS NOT NULL THEN @year ELSE YEAR END)
zodat je “=” char
. kunt vasthouden
Antwoord 6, autoriteit 15%
SELECT * FROM table WHERE column = IF (? = '', column, ?);
Antwoord 7, autoriteit 6%
Dit is laat, maar kan nuttig zijn voor anderen
Je kunt dit proberen.
where
isnull([column], '') = CASE WHEN @column IS NULL THEN isnull([column], '') ELSE @column END
Antwoord 8, autoriteit 3%
Nou, ik had hetzelfde probleem en het volgende loste mijn probleem op:
... where column = case when @variable = 'all' then column else @variable end
Houd er rekening mee dat u altijd een standaardwaarde moet verzenden
, stel ik mijn standaardwaarde in op ‘alle’. Dus als ik@variable = 'all'
instel, leest mysql het als:
where column = column
wat hetzelfde is alswhere 1=1
Antwoord 9, autoriteit 3%
Bent u misschien op zoek naar de operator IN-criteria?
SELECT * from table where column in (1,2,3,4,5) or column in ('value', 'value2', 'value3');
Antwoord 10, autoriteit 3%
Ik heb met dit probleem te maken gehad bij het ontwikkelen van dynamisch samenstellende query’s.
Hier is mijn oplossing in het kort:
WHERE (column = ANY (SELECT distinct column) OR column IS NULL)
Dit werkt met NULL-waarden en is praktisch identiek aan het lege WHERE-statement. Ik gebruik haakjes om de mogelijkheid te behouden om meer WHERE-opties toe te voegen met de AND-operator.
Het betekent dat dit:
select count("objectId"), "source"
from "SomeTable"
where "createdAt" > '2020-07-06'
and ("source" = any (select distinct "source") or "source" is null)
and ("country" = any (select distinct "country") or "country" is null)
and "channel" is not null
group by "source"
gelijk aan dit:
select count("objectId"), "source"
from "SomeTable"
where "createdAt" > '2020-07-06'
and "channel" is not null
group by "source"
Zodat ik een querysjabloon kan maken:
...
WHERE (column = {{filter_value}} )
...
en stel ANY (SELECT distinct column) OR column IS NULL)
in als standaardwaarde voor {{filter_value}}
Antwoord 11
Als dit iemand helpt… om erop te wijzen, als je een probleem hebt, zoals SELECT * FROM something WHERE (kan specifiek zijn of alles), zoals het filteren van dingen,
u kunt
. gebruiken
SELECT * FROM something as s WHERE (?1 = 0 OR ?1 = s.type = ?1)
0 hier is een zojuist voorgedefinieerde voor iedereen, dus voel je vrij om te veranderen, ik had dit nodig tijdens het gebruik van JPA-repositories met slaapstand voor filteren. Je kunt dit niet medicinaal doen zoals gesuggereerd door een eerder antwoord vanwege de veiligheid met voorbereide verklaringen. Waar de ?1 overeenkomt met :
Page<Something> filterSometing(Long type,Pageable pageable);
Antwoord 12
zet elvis-operator in dat veld
" . ($variable == 'selected value' ? '' : "AND column='" . $variable . "' ") . "
dus waar u alles selecteert in de opties in de html-pagina, zal dit ^^-veld niet worden uitgevoerd
maar wanneer u iets selecteert, wordt deze code weergegeven zoals column='”.$variable.”‘
Antwoord 13
U kunt gebruiken
WHERE 1
1 is zoals in andere talen altijd waar. Je hebt dus geen filter