簡體   English   中英

當SECOND Select查詢的field = 0時,MySQL返回所有行

[英]MySQL returns all rows when field=0 from SECOND Select query

這種情況類似於:SO問題; 當field = 0時mySQL返回所有行 ,並且Accepted答案是一個非常簡單的技巧,用單引號引起零

從:

SELECT * FROM table WHERE email=0 

至:

SELECT * FROM table WHERE email='0'

但是,我的情況稍有不同,因為我的查詢類似於:

   SELECT * FROM table WHERE email=( 
         SELECT my_column_value FROM myTable WHERE my_column_value=0 AND user_id =15 LIMIT 1 )

從某種意義上講,這就像簡單地說: SELECT * FROM table WHERE email=0 ,但是現在有了Second Query

請注意:必須使用SECOND QUERY

當我嘗試: SELECT * FROM table WHERE email='( SELECT my_column_value FROM myTable WHERE my_column_value=0 LIMIT 1 )' (注意第二個查詢的單引號)

Errors near '(. MySql SCREAMED Errors near '(.

如何做到這一點

任何建議都非常榮幸


EDIT1:可視化查詢

在此處查看STEN_TB: http ://snag.gy/Rq8dq.jpg

現在,主要目的是獲得sten_h ,其中rawscore_h = 0;

整體當前查詢

SELECT sten_h
                FROM sten_tb
                WHERE rawscore_h =  (
                SELECT `for_print_stens_rowscore`
                FROM `for_print_stens_tb`
                WHERE `for_print_stens_student_id` =3
                AND `for_print_stens_factor_name` = 'Factor H' )

Second Query的結果可以是任何數字,包括ZERO

>=1任何數字均可正常工作,並從sten_h返回一個相應的值。 =0不起作用,它返回所有行

這就是問題。

正確的答案或解決方案

萬一某人最終陷入這種悖論,“已接受”的答案就包含了一切。

請參閱STEN_TBhttp : STEN_TB

在此處查看所需的Query結果: http : //snag.gy/wa4yA.jpg

我相信您的問題與隱式數據類型轉換有關。 您可以使這些數據類型轉換顯式以獲得控制權。

(“技巧”將文字0括在單引號中,使文字成為字符串文字,而不是數字。)

在更一般的情況下,可以使用CASTCONVERT函數來顯式指定數據類型轉換。 您可以在需要的地方使用表達式代替列名。

例如,要獲取my_column_value返回的值以匹配email列的數據類型,假設email是字符類型,則類似於:

... email = (SELECT CONVERT(my_column_value,CHAR(255)) FROM myTable WHERE ...

或者,將文字整數值轉換為字符串值:

 ... FROM myTable WHERE my_column_value = CONVERT(0,CHAR(30)) ...

如果email和my_column_value僅表示是或否,則幾乎可以肯定它們都是BIT NOT NULL或您的架構用於布爾值的其他二值類型。 (您的ORM可能使用特定的ORM。)強制轉換通常是由於設計不良而引起的。

如果應該是特定用戶,則不應使用LIMIT,因為表是無序的,並且不會返回特定用戶。 說明您的問題,查詢應該返回什么,包括“第15個”的含義。

(具有所有類似的列是不好的設計:rawscore_a,sten_a,rawscore_b,sten_b,...。使用具有兩列的表:rawscore,sten。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM