【问题标题】:SELECT data FROM two tables in MySQL从 MySQL 中的两个表中选择数据
【发布时间】:2013-02-13 08:12:36
【问题描述】:

我有什么:下一个结构:

table_zero
-> id (带自动增量的PRIMARY)
-> 其他

table_1
-> id (表零 id 的外键)
-> varchar(80) 示例值:(aahellobbb)
-> one_field

table_2
-> id (表零 id 的外键)
-> varchar(160) 示例值:(aaececehellobbb)
-> 其他字段

我想要什么: 搜索并获得一个 (id,varchar) 数组,其中包含在 varchar 字段上与 LIKE '%str%' 匹配的所有匹配项。例如,如果我使用“hello”字符串进行搜索,那么我应该得到两个示例值及其各自的 id。这些 id 总是不同的,因为它们是对 PRIMARY KEY 的引用。

我尝试了什么:我尝试使用 UNION ALL,但在我的示例中它不适用于 LIMITS。

【问题讨论】:

    标签: mysql select union database-table


    【解决方案1】:

    通过使用UNION,您可能会获得多次具有相同 ID 的行。使用LEFT JOIN 怎么样?

    如果我理解了你的问题:

    SELECT table_zero.id, table_1.varchar_field, table_2.varchar_field
    FROM table_zero
      LEFT JOIN table_1 ON table_zero.id = table_1.id
      LEFT JOIN table_2 ON table_zero.id = table_2.id
    WHERE table_1.varchar_field LIKE '%str%'
      OR table_2.varchar_field LIKE '%str%'
    

    【讨论】:

    • 感谢您的回答。它对我来说很好,但我得到了一对名为“name”的两个字段。每对都有一个 NULL 值和匹配的字符串。这是正常的吗?我知道这是由于双表搜索......但是,它看起来很奇怪。感谢您的回答;)
    • 如果您希望结果中只有一个字段包含匹配的字符串,您可以使用COALESCE(table_1.varchar_field, table_2.varchar_field) AS matched_string 而不是table_1.varchar_field, table_2.varchar_field
    【解决方案2】:

    试试这个

    SELECT *
    FROM 
    (
    SELECT table_zero.id AS ID, table_1.varchar_field AS field
    FROM table_zero
      JOIN table_1 ON table_zero.id = table_1.id
    WHERE table_1.varchar_field LIKE '%str%'
    UNION
    SELECT table_zero.id, table_2.varchar_field  AS field
    FROM table_zero
      JOIN table_2 ON table_zero.id = table_2.id
    ) tbl
    WHERE 
    tbl.field LIKE '%str%'
    

    【讨论】:

    • 谢谢,但 Frostys 是最权威的 ;D 还是要投票!
    • 内存占用过多,intent按一列排序时,20秒内选择200.000行限制0、10。
    【解决方案3】:
    SELECT table_zero.id, table_1.varchar_field, table_2.varchar_field
    FROM table_zero
      LEFT JOIN table_1 ON table_zero.id = table_1.id
      LEFT JOIN table_2 ON table_zero.id = table_2.id
    WHERE table_1.varchar_field LIKE '%str%'
      OR table_2.varchar_field LIKE '%str%'
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-01
      相关资源
      最近更新 更多