mysql查询使用值(没有子选择)

时间:2016-01-26 08:27:39

标签: sql foreign-keys relationship

由于永久使用ORM,我不知道如何编写此查询,但我需要在没有ORM的情况下编写它。

表格设计:

用户:

  

| ID |用户名| ...

端口:

  

| ID | USER_ID |端口|

我的应用获取了用户名,现在我需要使用用户的ID来查找匹配用户名的所有端口以获取端口。

2 个答案:

答案 0 :(得分:1)

执行JOIN以查找userparam指定的用户的端口(或任何您称之为的用户)。

select u.id, u.username, p.id, p.user_id, p.port
from users u
  join ports p on u.id = p.user_id
where u.username = :userparam

(您可以从SELECT列表中删除不需要的列。)

答案 1 :(得分:1)

users:
    id|username|...

ports:
    id|user_id|port|

最后考虑SELECT行。只是把一个占位符开始

select count(*)

然后实际开始。问我需要哪些表来获取数据FROM

FROM users, ports

这将(从概念上)创建一个包含每个用户与每个端口匹配的行的新表 如何过滤掉这个新表中没有的所有数据 适用于我的查询?忽略除WHERE之外的所有内容,告诉它匹配

WHERE user.id == ports.user_id 

你可以认为这是对你在FROM子句中放入的所有表的所有行中的巨表中的行进行过滤。

现在您拥有了所有这些行,您可以SELECT从您创建的新表格中找到您感兴趣的列。

假设您想要返回任何port.id(s)。

SELECT port.id
FROM users, ports
WHERE user.id == ports.user_id 

一种更好的语法,可以使WHERE部分保持在FROM部分附近 当你有很多表时这很重要

SELECT port.id
FROM users join ports ON user.id == ports.user_id