当SECOND选择查询时,MySQL返回field = 0时的所有行

时间:2014-11-24 18:04:44

标签: mysql select

此案例类似于: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_TBhttp://snag.gy/Rq8dq.jpg

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

2 个答案:

答案 0 :(得分:2)

我相信您的问题是隐式数据类型转换。您可以将这些数据类型转换显式化,以获得控制权。

("技巧"用单引号包装文字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)) ...

答案 1 :(得分:0)

如果email和my_column_value只是表示true或false,那么它们几乎肯定都是BIT NOT NULL或您的架构用于布尔值的其他双值类型。 (你的ORM可能使用特定的一个。)铸造通常是一个糟糕的设计所必需的黑客。

如果它应该是特定用户,那么您不应该使用LIMIT,因为表是无序的,并且不会返回特定用户。在你的问题中解释你的查询应该返回什么,包括你的意思" 15th"。

(拥有所有类似的列是糟糕的设计:rawscore_a,sten_a,rawscore_b,sten_b,....使用包含两列的表:rawscore,sten。)