mysql - Tarkistetaan useita sarakkeita yhdelle arvolle

Translate

Minulla on taulukko, jolla on esimerkiksi tällaisia sarakkeita:

id,col1,col2,col3,col4

Haluan nyt tarkistaaANY/col1, col2, col3, col4on läpäissyt arvo.

Pitkä tapa tehdä se olisi ..

SELECT * FROM table WHERE (col1 = 123 OR col2 = 123 OR col3 = 123 OR col4 = 123);

Luulen, että se on päinvastainen versioIN.

Onko olemassa helpompaa tapaa tehdä mitä haluan?

This question and all comments follow the "Attribution Required."

Kaikki vastaukset

Translate

Voit käyttääINpredikaatti, kuten niin:

SELECT * FROM table WHERE 123 IN(col1, col2, col3, col4);

SQL Fiddle -demo


se on IN: n päinvastainen versio.

Ei se ole, Se on sama kuinORs niin kuin teit kysymyksessäsi.


Tämän selventämiseksi:

PredikaattiINtai asetettu jäsenyys määritellään1:

enter image description here

MissäValue Expressionvoi olla joko2:

enter image description here

Joten on hienoa tehdä se tällä tavalla arvolauseketta käyttäen123, joka on kirjaimellinen.


1, 2:Kuvia:SQL-kyselyt pelkästään kuolevaisille (R): Hands-On Guide for Data Manipulation in SQL

Lähde
Translate

Voisit tehdä jotain seuraavista: (Huomaa: Oletetaan, että sarakkeet ovat numeerisia arvoja. Ja vain liittämällä ketjutettu arvo luo etsimäsi merkkijonon, erota sarakearvot erottimella. Pipe (|) on tämän erotin esimerkki.)

SELECT [ID]
    ,[Col1]
    ,[Col2]
    ,[Col3]
    ,[Col4]
FROM [Table1]
WHERE '123' IN (
    CAST([Col1] AS VARCHAR) + '|'
    + CAST([Col2] AS VARCHAR) + '|'
    + CAST([Col3] AS VARCHAR) + '|'
    + CAST([Col4] AS VARCHAR) + '|'
)
Lähde
Translate

Minulla oli samanlainen ongelma ja ratkaisin sen tällä tavalla:SELECT * FROM table WHERE col1 OR col2 IN(SELECT xid FROM tablex WHERE somecol = 3)

Etkö ole varma, onko se "paras tapa", mutta se toimii minulle.

Ajatuksia?

Lähde
Kirjailijasta