【问题标题】:MYSQL - QUERY FROM TWO TABLESMYSQL - 来自两个表的查询
【发布时间】:2014-04-01 19:51:58
【问题描述】:

问题 - 假设我有 2 张桌子。

表1 - 名称是permission_list,列是ID(唯一ID)、col_ID、user_ID

表 2 - 名称为 list_entries,列为 ID(唯一 ID)、标题、描述、状态

我想选择表 2 中状态为“public”的所有行,以及表 2 中的 ID 显示在表 1 中(列 col_ID 下)的表 2 中的所有行,如果 user_ID在表 1 中匹配某个值。因此,任何公开的内容,或该特定用户在权限表下列出的任何内容。此查询还将删除重复项 - 如果用户在他们的 permissions_list 中列出了一个公共条目,它就不会出现两次。

希望这是有道理的!

【问题讨论】:

  • 示例代码:SELECT table1.* , table2.* FROM table1 , table2 WHERE table1.id=3490 AND table2.value>500
  • 或者,更具可读性的 JOIN... SELECT table1.* , table2.* FROM table1 join table2 ON table1.id=3490 AND table2.value>500

标签: mysql sql select join


【解决方案1】:

给你:

SELECT DISTINCT table2.* from table2
LEFT JOIN table1 USING (id)
WHERE status='public'
OR user_ID='someuser';

【讨论】:

  • 不会帮助他们学习。你想在这里看到多少这样的问题?
  • 我太天真了——他们不会在这里问他们是否知道要搜索什么。
  • 这个有效地回答了这个问题。我对 mysql 并不陌生,但我无法从谷歌搜索中弄清楚这种查询是否会消除 table2 中列出的条目,如果它们没有出现在 table1 中。但是,我没有想到,默认情况下,table1 中的条目要么是应该从 table2 显示的条目的副本,要么是不公开的,因此不需要“消除”。所以真的,它只是“所有公共的,或者所有与另一个表相对应的”。就我而言,Brainfart - 但感谢您指出这一点!
  • 另外,使用时的奖励积分 - 我不知道那个。我知道“ON”,“USING”似乎更优雅。
  • 您为什么不能在原始问题中详细描述问题?很多话都没有错。您正在查看内部联接和外部联接之间的区别。
【解决方案2】:

第一件事你需要接受一些关于 JOIN 的教育,第二件事叫做 DISTINCT。

从这里开始...https://www.google.com/

您尚未指定您的加入条件,因此我们无法真正为您提供代码示例。另外,您提出问题的方式,我不完全确定您不想要 UNION。阅读这些概念,当你可以改进问题时再回来。

【讨论】:

    【解决方案3】:
    SELECT table_2.status, table_2.ID, table_1.col_ID
    FROM table_1 JOIN table_2
    WHERE table_2.status = 'public'
        AND table_2.ID = table_1.col_ID
        AND table_1.user_ID = 'certain value'
        ;
    

    试试这个

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-01-10
      • 1970-01-01
      • 2013-11-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-10
      相关资源
      最近更新 更多