Mysql SQL从同一个表中选择列
我将带着我的标签直接进入,我的问题很快就显而易见了 表1:Mysql SQL从同一个表中选择列,mysql,sql,Mysql,Sql,我将带着我的标签直接进入,我的问题很快就显而易见了 表1: Owner ownerID Name Address userID ______________________________________________ Name 1 Tim "top road" 1 表2: User userID userName password secretQA1 secretQA2 _________
Owner ownerID Name Address userID
______________________________________________
Name 1 Tim "top road" 1
表2:
User userID userName password secretQA1 secretQA2
___________________________________________________________________
1 BigTim pwhat 7 8
表3:
secretQA id question answer
_______________________________________
7 "Mums name" "Tony"
8 "Fav sport" "dressing up"
无论如何,我想做的是,我知道ownerID是1,我想给所有者所有他的信息!所以我一直在做的事情是这样的:
SELECT secretQA.question AS Question1, secretQA.answer AS Answer1,
secretQA.question AS Question2, secretQA.answer AS Answer2,
User.password AS Password
FROM secretQA, owner, User
WHERE owner.id = 1
AND SecretQA.id = owner.secretQA1
AND SecretQA.id = owner.secretQA2
AND user.id = owner.userID;
但是没有用
这就是我想要得到的:
Question1 Answer1 Question2 Answer2 Password
____________________________________________________________
"Mums name" "Tony" "Fav sport" "dressing up" pwhat
为所有未来的帮助干杯
编辑:这里的密码只是一个例子,在我的真实版本中不会是纯文本。这只是我正在做什么的一个简化问题。在表2中,删除“secret1”和“secret2”列。在表3中,添加一个新列“userID” 在那之后,你应该可以做类似的事情
select u.username, u.password, s.question, s.answer
from table1 as o join table2 as u on o.userid = u.userid
join table3 as s on s.userid = o.userid
where o.ownerid = 1
另外,正如其他人所指出的,将密码存储为纯文本不是一个好主意。要获得所需的密码,必须两次加入SecretQA表。这就是为什么使用显式连接语法更好的一个示例 这应该行得通
SELECT q1.question AS Question1,
q1.answer AS Answer1,
q2.question AS Question2,
q2.answer AS Answer2,
u.password AS Password
FROM User u
JOIN owner o ON u.id = o.userID
LEFT JOIN secretQA q1 on o.secretQA1 = q1.id
LEFT JOIN secretQA q2 on o.secretQA2 = q2.id
WHERE owner.id = 1
请注意,secretQA
表必须两次参与联接。我给它取了别名q1
和q2
,使它可以工作
哦,就像其他人说的,如果你将密码存储为纯文本,tee-hee。intertubz将立即启动。试试这个
SELECT q1.question, q1.answer, q2.question, q2.answer, u.password
FROM user u
JOIN secretqa q1 ON u.secretQA1 = q1.id
JOIN secretqa q2 ON u.secretQA2 = q2.id
WHERE u.id = ?
你事先知道有多少秘密问题吗?你是用明文存储密码吗?这些表没有标准化。更好的做法是远离隐式表联接。WHERE owner.id=1应该是WHERE owner.OwnerID=1,因为前者不是有效的字段名。这将是我添加密码添加到其中的两个秘密问题。实际上,情况会有所不同