MYSQL连接两个表,具有第二个表的匹配值

时间:2017-10-01 15:46:18

标签: php mysql sql

我有两个表[tags]和[tags_to_item]

Address 0x4008e6: 01 0d 00 ff

第一个是标签表,第二个存储标签和商品

之间的关系

例如

  

第12项与标记“Ninja”相关联。第3项与   标签' Pirate'和' Spaghetti'

给出这些表格 我想加入他们,这样我就可以显示所有可用的标签,但是显示哪些标签与给定的商品ID相关联

  

好吧我想检查item_id = 3

期望的输出:

tag_id name          tag_id  item_id
------ -------       ------  -------
1      Pirate         1       3
2      Monkey         2       9
3      Ninja          3       12
4      Spaghetti      4       3

我尝试了这个查询,但它没有按预期工作......它没有显示完整列表

tag_id   name       item_id
------   -------    -------
1        Pirate     3
2        Monkey     null
3        Ninja      null
4        Spaghetti  3

更新

感谢@Gordon我'越来越接近我需要的,这是一个不错的查询

SELECT a.name, a.tags_id, o.item_id from tags as a
left outer join tags_to_item as o on a.tags_id = o.tags_id WHERE o.item_id = 3
union all
select a.name, a.tags_id, o.item_id from tags as a
right outer join tags_to_item as o on a.tags_id = o.tags_id

2 个答案:

答案 0 :(得分:0)

我认为这就是你想要的:

select t.tags_name, t.tags_id, tti.item_id
from tags t left join
     tags_to_item tti
     on a.tags_id = o.tags_id and tti.item_id = 3;

请注意,项目的条件已从where子句移到on子句。如果在where子句中进行比较,则将外连接转换为内连接。

另外,我输入了更合理的表别名。不要使用像a这样的任意字母作为表别名。使用表格缩写。

答案 1 :(得分:0)

在查询下方使用此功能。

function formSubmit(e)
{

  // Function level variables
  var date = e.values[0];
  var name = e.values[1];
  var phone = e.values[2];

  // Get the spread sheet that contains the data
  var ss = SpreadsheetApp.openById('1FpRbYC-
  nfltxoalGV974aDX6A_fEy_MBYBShruRRYfM');
  var sheet = ss.getSheetId(0);

  if(sheet)
  {
    Logger.log(name);
  }
  else
  {
  Logger.log(phone)
  }


  // Add submission to DB
  sheet.appendRow([date,name,phone]);

使用mysql case运算符。在case运算符下执行另一个sql查询。其中checked标签表有当前item_id或not.if标签表有item_id然后显示item_id其他明智地显示空字符串。