[英]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_TB
: http : STEN_TB
在此處查看所需的Query
結果: http : //snag.gy/wa4yA.jpg
我相信您的問題與隱式數據類型轉換有關。 您可以使這些數據類型轉換顯式以獲得控制權。
(“技巧”將文字0括在單引號中,使文字成為字符串文字,而不是數字。)
在更一般的情況下,可以使用CAST
或CONVERT
函數來顯式指定數據類型轉換。 您可以在需要的地方使用表達式代替列名。
例如,要獲取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.