Mysql SQL从同一个表中选择列

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 _________

我将带着我的标签直接进入,我的问题很快就显而易见了

表1:

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,因为前者不是有效的字段名。这将是我添加密码添加到其中的两个秘密问题。实际上,情况会有所不同