【问题标题】:SQL Is this Outer or Inner Join and how to join on ArraySQL 是外部联接还是内部联接以及如何加入 Array
【发布时间】:2017-03-23 19:06:13
【问题描述】:

当我开始并以前做过这件事时似乎很简单,现在我把自己弄糊涂了,遇到了障碍。

有两个表:News_Table 和 People_Table。在 News_Table 下有一个字段:News_People_Contributed,它具有数组格式 (1,4,7,10) 的 People_Table 的 ID,因此有四个人贡献了。我正在创建一个查找 News_Header AND News_People_Contributed 的搜索参数,但不知道如何创建搜索列。

News_Table
News_ID
News_Header
News_People_Contributed

People_Table
People_ID
People_First_Name...

是不是有点……

Select*
From News_Table
Left Join News_Table
On People_Table.People_ID IN (News_Table.News_People_Contributed)
Where Search_Param Like '%News_Header%' OR Search_Param Like '%People_First_Name%'

问题是 (News_Table.News_People_Contributed) 是一个字符串,而 ID 不是。另外我可能没有人贡献等等。为了使问题更加复杂,我在 MS Access 而不是 MySql 中执行此操作,因此必须将其编码为“老派” sql 以解决问题。

【问题讨论】:

  • News_People_Contributed 将 ID 作为字符串,而不是多值字段?如果该字段是一个字符串,以前看不到您是如何完成此查询的。存储为字符串是非常糟糕的设计。
  • 它是一个多选菜单,使其变得简单。否则,我必须创建第三个表来链接其他两个表 - 在两个表之前完成。我喜欢使用数组,因为它更干净,更容易在其他项目上执行循环。也可以随时拆分字符串以调用数组。
  • 这是糟糕的表结构。您应该有第三张桌子加入两者。然后在三个表上创建一个查询并进行搜索。你提到mysql,这跟什么有什么关系?
  • 嗯,还有第三个表具有多值字段 - 你只是看不到它或直接使用它,因为它是一个隐藏的系统表。评论support.office.com/en-us/article/…
  • 我提到 MySql 是因为 Access 不支持 MySql 支持的某些 SQL 语言,而使用 Access,您编写的查询略有不同。这个论坛上的大多数人都用应用于 MySql 数据库的真正 Sql 来回应。如果您知道较旧的访问权限,您就会知道它们非常相似,但绝对不一样。我知道第三张表是要走的路,但这也意味着我必须运行多次插入,因为数组更容易。感谢 cmets。

标签: mysql ms-access jointable


【解决方案1】:

对字符串列表中的匹配项执行交叉连接和过滤。它没有提到效率或形式(如前所述),但它确实有效。

SELECT *
FROM News_Table, People_Table
WHERE InStr([News_People_Contributed],CStr([People_ID])) > 0;

这仅解决了部分问题:连接——在最初的 cmets 中似乎每个人都关心的问题。没有足够的关于 Search_Parameter 的详细信息来提供帮助。如果您需要更多帮助,请提供更多详细信息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-11-03
    • 2014-05-10
    • 1970-01-01
    • 2015-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多