我对MYSQL很新。我正在尝试编写一个将在多个表中搜索的查询,但它似乎只评估查询的第一个条件。我开发的查询是:
SELECT DISTINCT user.user_id, user_netid, user_firstname, user_lastname,
user_dmid, user_insnum, instype_id, user_birthday, user_insapproved
FROM user, signup, event
WHERE (user.instype_id = 3 OR user.instype_id = 4)
AND signup.signup_attended =1 AND signup.signup_timestamp >= 1325376000
AND (event.activity_id=37 OR event.activity_id=40 OR event.activity_id=5);
我知道这很长,但就像我说的,我是新手,这是我能想到的最好的。在任何情况下,它似乎只评估user.instype_id,因为它给我记录signup.signup_attended!= 1或user.instype_id之后出现的任何其他条件。有人可以告诉我我做错了吗?
答案 0 :(得分:0)
我的猜测是,由于您的交叉连接(带逗号的表列表......但没有连接语句),这种情况正在发生。基本上,您可以过滤掉具有inst类型的用户,但您仍然会向用户显示signup_attended
,因为user
表和signup
表没有链接,所以它只是开始捣碎桌子在一起。也许wikipedia can explain a cross join better than I can :)
您需要使用JOIN
以下是一个事后的示例(在连接列上猜测)
SELECT DISTINCT user.user_id, user_netid, user_firstname, user_lastname,
user_dmid, user_insnum, instype_id, user_birthday, user_insapproved
FROM user
JOIN signup
ON signup.user_id = user.id
JOIN event
ON event.signup_id = signup.id
WHERE (user.instype_id = 3 OR user.instype_id = 4)
AND signup.signup_attended =1 AND signup.signup_timestamp >= 1325376000
AND (event.activity_id=37 OR event.activity_id=40 OR event.activity_id=5);
在SQL JOIN上执行google,您应该获得一些解释此信息的信息。 Here is one tutorial
答案 1 :(得分:0)
这里有一些事情需要修复。您访问的每个值都需要与表关联。您的第一个值“user.user_id”可以正常工作,但其余值与表格无关。(如果这有意义的话)。
您能否提供正在使用的表的布局。
答案 2 :(得分:0)
使用语法:
select * from user
join signup on user.userPrimaryKey=signup.userForeignKey
where conditions...
或:
select * from user,signup
where user.userPrimaryKey=signup.userForeignKey AND condition...
就像Marc B说你做笛卡尔连接(表的每一行都会关联到另一个表的所有行)