0

我会直接潜入我的表格,很快我的问题就很明显了

表格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  

为所有未来的帮助干杯

编辑:密码在这里只是一个例子,在我的真实版本中不会是纯文本这只是我在做什么的一个简化问题

4

3 回答 3

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表必须参与两次连接。我给它起了别名q1q2使它工作。

哦,就像其他人所说的那样,如果您将密码存储为纯文本,请注意。intertubz 将 pwn 你,srsly。

于 2012-08-31T16:39:27.007 回答
0

在表 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

此外,正如其他人所指出的,将密码存储为纯文本并不是一个好主意。

于 2012-08-31T16:38:50.643 回答
0

尝试这个

 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 = ?
于 2012-08-31T16:39:45.220 回答