SQL WHERE-kolom = alles

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=1kunt 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:

  1. 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)
  2. Je wilt dat de kolom wordt ingesteld, maar het maakt je niet uit wat: Gebruik WHERE column IS NOT nULL
  3. 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 = columnwat hetzelfde is als where 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

Other episodes