【问题标题】:MySQL Join QueryMySQL 连接查询
【发布时间】:2010-07-26 17:21:25
【问题描述】:

我需要为以下内容创建一个连接查询:

餐桌供应商:

  • 身份证
  • 姓名

表供应商_车辆

  • 身份证
  • supplier_id
  • vehicle_id

一个供应商可以拥有多辆汽车。

在我的前端表单中,我有一个复选框列表 - 用户可以选择多辆汽车。后端脚本需要进行搜索并带回包含任何指定车辆 ID 的所有供应商。

复选框列表名称为 vehicle_type[] 并将在 $_POST 数组中结束(例如):

Array
(
    [0] => 1
    [1] => 4
    [2] => 6
)

目前我可以使用一些 SQL 示例来测试使用不同值的查询。

【问题讨论】:

    标签: mysql join


    【解决方案1】:

    如果您知道车辆 ID,则可以使用 IN 子句:

    SELECT *
      FROM supplier s
         , supplier_vehicles v
     WHERE s.id = v.supplier_id
       AND v.vehicle_id IN (1, 4, 6)
    

    如果您只需要不同的供应商 ID,您可以使用 DISTINCT。

    SELECT DISTINCT s.supplier_id
      FROM supplier s
         , supplier_vehicles v
     WHERE s.id = v.supplier_id
       AND v.vehicle_id IN (1, 4, 6)
    

    【讨论】:

    • @OMG Ponies - 我只是想给他一些查询示例。我不确定他在前端使用的是什么语言,所以我尽量保持通用。但是由于 SQL 注入风险,我不会在前端进行硬编码查询,如果需要,我会创建一个 SP 并传递值并在后端使用动态 SQL。
    • 向合唱团讲道 :) 我不知道动态 IN 参数是否是 OP 需要的。
    • @OMG Ponies - 是的,我已经看过你的足够多的帖子并且尊重你,知道你知道:)。我不确定这是否正是 OP 所需要的,我只是想向他展示如何进行一些简单的 JOIN 查询并为给定的车辆 ID 获取不同的供应商。无论如何,如果他们需要更详细的答案,希望他们能澄清一下。
    【解决方案2】:

    首先创建一个字符串,其中包含数组中的所有元素,用逗号分隔。不确定您使用哪种语言执行此操作,但您可以使用 JOIN 函数或遍历数组。

    根据您的示例,字符串将等于1,4,6

    您的 SQL 查询:

    "SELECT s.name
    FROM supplier AS s
    JOIN supplier_vehicles AS v
    ON s.id = v.supplier_id
    WHERE v.vehicle_id IN (" + stringName + ")"
    

    【讨论】:

      猜你喜欢
      • 2021-08-16
      • 1970-01-01
      • 1970-01-01
      • 2012-04-21
      • 2016-05-19
      • 2011-11-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多