【问题标题】:SQL SELECT depending on multiple variables and tablesSQL SELECT 取决于多个变量和表
【发布时间】:2015-06-06 14:59:31
【问题描述】:

我正在尝试创建一个SELECT 查询,但这里的问题是我得到了多个适用于不同表的变量。

为了清楚起见,我将展示数据库表:

类别

   CatID
   CatName

子类别

   CatID
   SubCatID
   SubCatName

公司

    CompanyID
    CompName
    SubCat

型号

   CompID
   ModelID
   ModelName

帖子

   PostID
   ModelID

现在,我得到一些参数,如:Cat、Subcat、Category、ModelID 和 Name,我需要选择所有适合参数的 PostID 匹配结果。

例如,如果我得到以下参数:

Cat = "Electronics"
Subcat="Computers"
Company="Apple"
ModelName="Macbook Air"
Keyword="new"

我需要得到 Posts 的以下结果,其中类别等于 Cat 变量,并且子类别与 SubCat 变量匹配等等.. 除了使用 @987654328 过滤结果@ 为我得到的关键字变量。

不幸的是,经过多次尝试解决它后我失败了。尝试以不同方式使用 Inner JOIN,但没有成功。

如果有人能帮我解决这个问题,我将不胜感激,因为我不知道如何继续这一点,而且我没有太多时间来完成这个项目。

提前致谢

【问题讨论】:

  • 类别不只是没有父类别的子类别吗?你需要两张桌子吗?无论如何,我会一次写一个查询并向我们展示您目前的情况,以便我们帮助您找到问题
  • 嗯,是的,但我确实需要两个表在网站上的另一个用途。我多次尝试导致没有解决方案或方法,所以发布它是没用的。虽然,我刚刚注意到有人回答了这个问题,所以我会试一试并告诉你它是否有效。
  • 这适用于哪个 RDBMS?请添加标签以指定您使用的是mysqlpostgresqlsql-serveroracle 还是db2 - 或其他完全不同的东西。

标签: c# sql asp.net sql-server select


【解决方案1】:
Select posts.*
from Posts inner join
    model on posts.modelId = model.modelId and model.ModelName = 'Macbook Air' inner join
    Company on model.compID = company.companyID and Company.CompName = 'Apple' inner join
    Subcategory on company.subCat = Subcategory.SubcatID and subcategory.subcatName ='Computers' inner join
    Category on subcategory.catID = category.catID and category.CatName = 'Electronics'
where posts.keywordField like '%new%'

我必须在那里做出一些假设,例如您尝试在哪个字段中搜索关键字。但是您得到了一般的想法:在每个内部连接处,您可以指定一个额外的条件来限制您的结果,并且在这个方式将您的参数应用于您的查询。

【讨论】:

  • 非常感谢!完美运行。
【解决方案2】:

实现这项工作的一种可能方法是创建一个视图,这样您就只有一个表可供搜索。

Select c.*, sc.SubCatName, com.*, ModelName, p.*
from Category c 
join Subcategory sc on c.CatID = sc.CatID
join Company com on sc.SubCatID = com.SubCatID
join Model m on com.CompID = com.CompID
join Posts p on p.ModelID = m.ModelID

【讨论】:

  • 感谢您的回复!我正在尝试将其嵌入我的项目中,但我在理解您的答案中出现的“p”变量时遇到了一些麻烦,因为我们只得到 cat (c)、subcat (sc)、company (com ) 和模型 (m)。谢谢
  • @SIOS_dev 你有一个“帖子”表,我将其别名为“p”
猜你喜欢
  • 2012-11-30
  • 1970-01-01
  • 2010-11-23
  • 2019-05-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-16
  • 2011-03-08
相关资源
最近更新 更多