此案例类似于:S.O问题; mySQL returns all rows when field=0,接受的答案是一个非常简单的伎俩,用单引号将ZERO包围起来
FROM:
SELECT * FROM table WHERE email=0
TO:
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
MUST 。
当我尝试时:SELECT * FROM table WHERE email='( SELECT my_column_value FROM myTable WHERE my_column_value=0 LIMIT 1 )'
(请注意第二个查询的单引号)
MySql
SCREAMED Errors near '(.
如何实现
任何建议都非常荣幸
EDIT1:有关查询的直观视角
请在此处查看STEN_TB:http://snag.gy/Rq8dq.jpg
现在,主要目的是让sten_h
rawscore_h
= 0;
CURRENT QUERY 整体。
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://snag.gy/Rq8dq.jpg
在此处查看所需的Query
结果:http://snag.gy/wa4yA.jpg
答案 0 :(得分:2)
我相信您的问题是隐式数据类型转换。您可以将这些数据类型转换显式化,以获得控制权。
("技巧"用单引号包装文字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)) ...
答案 1 :(得分:0)
如果email和my_column_value只是表示true或false,那么它们几乎肯定都是BIT NOT NULL或您的架构用于布尔值的其他双值类型。 (你的ORM可能使用特定的一个。)铸造通常是一个糟糕的设计所必需的黑客。
如果它应该是特定用户,那么您不应该使用LIMIT,因为表是无序的,并且不会返回特定用户。在你的问题中解释你的查询应该返回什么,包括你的意思" 15th"。
(拥有所有类似的列是糟糕的设计:rawscore_a,sten_a,rawscore_b,sten_b,....使用包含两列的表:rawscore,sten。)