You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将SQL查询IN子句中的指定值附加到非空结果表?

解决方案:将指定的object_id值纳入查询结果

没问题!根据你的需求,分两种场景给你对应的实现方法:

场景1:仅在已有匹配结果中显示对应的object_id

如果你的目标只是把匹配到的行对应的object_id(也就是你IN子句里的那些值)明确显示在结果表中,那最简单的方式就是直接在SELECT列表里加上tr.object_id字段:

SELECT 
  tr.object_id, -- 新增这一行,显示对应的目标ID
  t.*, 
  tt.* 
FROM wp_terms AS t 
INNER JOIN wp_term_taxonomy AS tt 
  ON t.term_id = tt.term_id 
INNER JOIN wp_term_relationships AS tr 
  ON tr.term_taxonomy_id = tt.term_taxonomy_id 
WHERE tt.taxonomy IN ('nationality') 
  AND tr.object_id IN (1099, 1401, 1646, 1087, 1610, 1293) 
ORDER BY t.name ASC;

这样每个结果行都会带上它对应的那个object_id,完全符合你“附加到非空查询结果”的需求。

场景2:确保所有指定的object_id都出现在结果中(即使无匹配分类)

如果你的需求是不管某个object_id有没有对应的分类信息,都要把它列在结果里,那就要用LEFT JOIN配合临时数据集的方式来实现:

SELECT 
  ids.object_id,
  t.*, 
  tt.* 
FROM 
  -- 构造包含所有目标object_id的临时数据集
  (SELECT 1099 AS object_id UNION ALL
   SELECT 1401 UNION ALL
   SELECT 1646 UNION ALL
   SELECT 1087 UNION ALL
   SELECT 1610 UNION ALL
   SELECT 1293) AS ids
LEFT JOIN wp_term_relationships AS tr 
  ON ids.object_id = tr.object_id
LEFT JOIN wp_term_taxonomy AS tt 
  ON tr.term_taxonomy_id = tt.term_taxonomy_id 
  AND tt.taxonomy = 'nationality' -- 将分类条件移到关联中,避免过滤无匹配的ID
LEFT JOIN wp_terms AS t 
  ON t.term_id = tt.term_id
ORDER BY 
  t.name ASC, ids.object_id ASC;

这个查询的关键逻辑:

  • 先用UNION ALL创建了一个包含所有你指定ID的临时表ids,保证所有目标ID都会被纳入结果。
  • 用LEFT JOIN替代原来的INNER JOIN,这样即使某个ID没有对应的分类关系或分类数据,也会保留该行,对应的t.*和tt.*字段会显示为NULL。
  • 把tt.taxonomy = 'nationality'的条件从WHERE移到LEFT JOIN的关联条件里,避免过滤掉那些没有匹配到该分类的ID行。

你可以根据自己的实际需求选择对应的方案~

内容的提问来源于stack exchange,提问作者Andrius Solopovas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 08:34:34