INNER JOIN的Where子句不起作用

时间:2016-03-17 22:53:43

标签: php mysql

我有一个简单的问题,所以根据我对MySql JOINS的研究,我理解这个查询

int n = n;
int con = 3;
int frag = 0;
for(int i =0; i<= n; i++)
{
frag += i*con;
}
return frag;

如果他们的SELECT * FROM Rule INNER JOIN RuleList ON Rule.ruleID = RuleList.ruleID WHERE Rule.accountID = 'geoskygps@gmail.com' 匹配并且规则表中的ruleIDaccountID,则应仅显示两个表中的项目,但对我来说,我得到的是所有geoskygps@gmail.com的结果不仅仅是accountID

我也尝试使用geoskygps@gmail.com子句而不是AND,但我得到了相同的结果。

WHERE

如果有人能指出我正确的方向,我会非常感激。

谢谢, 麦克风 这是为了:show create Table Rule; SELECT * FROM Rule INNER JOIN RuleList WHERE Rule.ruleID = RuleList.ruleID AND Rule.accountID = 'geoskygps@gmail.com'

这是针对RuleList的 | Rule | CREATE TABLE Rule ( accountID varchar(32) NOT NULL, ruleID varchar(32) NOT NULL, isCronRule tinyint(4) DEFAULT NULL, ruleTag varchar(24) DEFAULT NULL, selector text, actionMask int(10) unsigned DEFAULT NULL, cannedActions varchar(80) DEFAULT NULL, priority smallint(5) unsigned DEFAULT NULL, minNotifyAge int(10) unsigned DEFAULT NULL, triggerReset smallint(5) unsigned DEFAULT NULL, notifyEmail varchar(128) DEFAULT NULL, emailSubject text CHARACTER SET utf8, emailText text CHARACTER SET utf8, smsText text CHARACTER SET utf8, useEmailWrapper tinyint(4) DEFAULT NULL, ruleDisable varchar(64) DEFAULT NULL, ruleEnable varchar(64) DEFAULT NULL, sendCommand text, isActive tinyint(4) DEFAULT NULL, description varchar(128) CHARACTER SET utf8 DEFAULT NULL, lastUpdateTime int(10) unsigned DEFAULT NULL, creationTime int(10) unsigned DEFAULT NULL, PRIMARY KEY (accountID,ruleID) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 |

3 个答案:

答案 0 :(得分:0)

嗨所以我只是尝试了下面的内容。您的代码似乎按照我创建的粗略表格的预期运行。问题可能出在你正在使用的数据中吗?

create table Rule(ruleID INTEGER,accountID text,data text);
insert into Rule values(1, 'geoskygps@gmail.com' , 'data');
insert into Rule values(2, 'nothing@gmail.com' , 'data');
insert into Rule values(3, 'geoskygps@gmail.com' , 'data');

create table Rulelist(ruleID INTEGER,accountID text,data text);
insert into Rulelist values(1, 'geoskygps@gmail.com' , 'data1');
insert into Rulelist values(2, 'geoskygps@gmail.com' , 'data1');
insert into Rulelist values(3, 'geoskygps@gmail.com' , 'data1');

select * FROM Rule
JOIN RUlelist
ON rule.ruleID = RuleList.ruleID
WHERE Rule.accountID = 'geoskygps@gmail.com'

返回以下内容:

ruleID | accountID           |  data |  ruleID |    accountID | data

1      | geoskygps@gmail.com |  data |  1      |    data      | data1

3      | geoskygps@gmail.com |  data |  3      |    data      | data1

答案 1 :(得分:0)

所以我明白了。这是正确的查询。

我必须在我的WHERE子句中添加第二个参数,因为两个数据库都拥有相同记录的倍数。

equilateral()

感谢输入人员。

答案 2 :(得分:-1)

规则是SQL中的保留关键字。看看这个:https://msdn.microsoft.com/en-us/library/ms189822%28v=sql.105%29.aspx?f=255&MSPPError=-2147217396

您可以使用单引号设置规则=&gt; 'Rule'.ruleID等等,但强烈建议您重命名。