SQL从2个表中选择*

SQL从2个表中选择*,sql,select,Sql,Select,我正在为朋友构建一个小型数据库应用程序,其中表1是联系人,表2是用户。我可以在这两个网站上找到电子邮件(一个作为登录用户,另一个作为联系人的所有者) 我尝试显示用户名等于已登录用户(电子邮件)的所有联系人字段 非常感谢 试试下面的方法。另外,我建议您学习SQL中的连接 SELECT * FROM contacts INNER JOIN users on contacts.username = users.email 听起来像是要将两个表连接在一起。理想情况下,您不希望将电子邮件用作表上

我正在为朋友构建一个小型数据库应用程序,其中表1是联系人,表2是用户。我可以在这两个网站上找到电子邮件(一个作为登录用户,另一个作为联系人的所有者)

我尝试显示用户名等于已登录用户(电子邮件)的所有联系人字段


非常感谢

试试下面的方法。另外,我建议您学习SQL中的连接

SELECT *
  FROM contacts
INNER JOIN
  users on contacts.username = users.email

听起来像是要将两个表连接在一起。理想情况下,您不希望将电子邮件用作表上的主键(数据越小,
JOIN
将越快);更好的选择是向Contacts和Users表中添加一个自动递增的Id(整数),设置为主键(唯一标识符)。连接整数要快得多,因为整数是每行4字节,而字符串(在MySQL中)是每字符长度1字节(拉丁1编码)+1字节

无论如何,回到原来的问题。我相信您正在寻找的查询(MySQL语法)是:

此外,我将避免使用
*
,因为它会稍微降低查询速度。相反,请尝试指定所需的确切列。

使用内部联接:

SELECT *
  FROM contacts as c
INNER JOIN
  users as u on u.email = c.username

请告诉我们,是什么阻止你显示用户名等于已登录用户(电子邮件)的所有联系人字段,所以可能重复…问题是什么???嗨,Chosun,我从那以后读了很多关于这个主题的文章。谢谢你的提示!关于MySQL,它仍然显示所有的表(不只是显示那些与u.email=c.username匹配的行),我已经检查了语法、数据库的确切名称等等。。。无需操作:(我将继续搜索subjectHi@MAC,它将显示所有列,因为我使用*。如果您只想返回某些列,请执行以下操作:选择c.Id、c.Name、u.Name…我更新了我的回答以反映这一点。此外,如果您找到此答案来回答您的问题,请将其标记为已接受的答案。谢谢!
SELECT c.Id, c.Col1, u.Col2, ...
FROM contacts AS c
INNER JOIN users AS u ON u.email = c.username
SELECT *
  FROM contacts as c
INNER JOIN
  users as u on u.email = c.username