2016-06-30 46 views
1

我遇到了MySQL查询的问题。当我试图使用查询的某一列过滤查询时,它说没有行。像表达式不起作用mysql

SELECT `Voucher`.`id`, `Voucher`.`name`, `Voucher`.`batch`, `Voucher`.`status`, `Voucher`.`perc_time_used`, `Voucher`.`perc_data_used`, 
`Voucher`.`last_accept_time`, `Voucher`.`last_reject_time`, `Voucher`.`last_accept_nas`, `Voucher`.`last_reject_nas`, `Voucher`.`last_reject_message`, 
`Voucher`.`user_id`, `Voucher`.`created`, `Voucher`. `modified`, `Voucher`.`extra_name`, `Voucher`.`extra_value`, `Voucher`.`password`, 
`Voucher`.`realm`, `Voucher`.`realm_id`, `Voucher`.`profile`, `Voucher`.`profile_id`, `Voucher`.`expire`, `Voucher`.`time_valid`, `Voucher`.`data_used`, 
`Voucher`.`data_cap`, `Voucher`.`time_used`, `Voucher`.`time_cap`, 
(SELECT voucher_values.value FROM voucher_values WHERE voucher_values.attribute = 'gender' AND voucher_values.voucher_id = `Voucher`.`id`) AS `gender`, 
(SELECT voucher_values.value FROM voucher_values WHERE voucher_values.attribute = 'residence' AND voucher_values.voucher_id = `Voucher`.`id`) AS `residence`, 
(SELECT voucher_values.value FROM voucher_values WHERE voucher_values.attribute = 'age' AND voucher_values.voucher_id = `Voucher`.`id`) AS `age`, 
(SELECT voucher_values.value FROM voucher_values WHERE voucher_values.attribute = 'nationality' AND voucher_values.voucher_id = `Voucher`.`id`) AS `nationality`, 
(SELECT voucher_values.value FROM voucher_values WHERE voucher_values.attribute = 'email' AND voucher_values.voucher_id = `Voucher`.`id`) AS `email`, 
(SELECT voucher_values.value FROM voucher_values WHERE voucher_values.attribute = 'facebookid' AND voucher_values.voucher_id = `Voucher`.`id`) AS `facebookid`, 
(SELECT voucher_values.value FROM voucher_values WHERE voucher_values.attribute = 'googleid' AND voucher_values.voucher_id = `Voucher`.`id`) AS `googleid`, 
(SELECT voucher_values.value FROM voucher_values WHERE voucher_values.attribute = 'interests' AND voucher_values.voucher_id = `Voucher`.`id`) AS `interests`, 
`User`.`id`, `User`.`username`, `User`.`password`, `User`.`token`, `User`.`name`, `User`.`surname`, `User`.`address`, `User`.`phone`, `User.email`, 
`User`.`active`, `User`.`monitor`, `User`.`country_id`, `User`.`group_id`, `User`.`language_id`, `User`.`parent_id`, `User`.`lft`, `User`.`rght`, 
`User`.`created`, `User`.`modified` 
FROM `rd`.`vouchers` AS `Voucher` LEFT JOIN `rd`.`users` AS `User` ON (`Voucher`.`user_id` = `User`.`id`) 
WHERE `User`.`id` IN (58,59) AND `email` LIKE '%%' ORDER BY Voucher.name DESC LIMIT 100 OFFSET 0 

我的问题是关于WHERE条款 - 更具体的email LIKE '%%'。当我尝试在百分比之间放置某些内容时,查询不返回任何行。而且我知道我放入的角色就在这个领域。

+1

你是什么意思%%? – scaisEdge

+0

%%是我知道这个不必要的所有电子邮件,如果我把它拿出来,它也会这样做。 –

回答

1

我不知道这是什么原因造成的问题,但是当LEFT JOIN ing,LEFT JOIN右表的条件应该只在ON子句内指定。

FROM rd.vouchers AS Voucher 
LEFT JOIN rd.users AS User 
ON (Voucher.user_id = User.id AND User.id IN (58,59)) 
WHERE email LIKE '%String%' 
ORDER BY Voucher.name DESC 
LIMIT 100 OFFSET 0 

如果Email列所属users表,那么这就是问题所在,你也应该把它添加到ON条款:

ON (Voucher.user_id = User.id 
    AND User.id IN (58,59) 
    AND email LIKE '%String%') 
ORDER BY Voucher.name DESC 
LIMIT 100 OFFSET 0 
+0

电子邮件列不属于它属于voucher_values的用户,您可以在查询内部的子查询中看到:(SELECT voucher_values.value FROM voucher_values WHERE voucher_values.attribute ='email'AND voucher_values.voucher_id ='Voucher'.' id')AS'email' –

+0

哦,这是一个相关的查询,用另一个选择来包装查询,并在外面移动'like'。 – sagi

+0

这对我的作品感谢您的帮助 –

0

多少行,当它处于这种状态回来了? (没有限制) 你在%%之间放置什么字符?

+0

响应是我想要的所有行之间没有%%之间的字符。我放入的角色是's' –