MySQL从另一个表中选择一列

时间:2017-01-09 09:47:17

标签: mysql

我正在尝试从第二个表格中提取信息(特别是class列)。我有两张桌子:

CREATE TABLE `tags` (
  `Tag` varchar(255) NOT NULL,
  `class` tinytext NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

--
-- Dumping data for table `tags`
--

INSERT INTO `tags` (`Tag`, `class`) VALUES
('Arya', 'label-default'),
('bull', 'label-info'),
('Cats', 'label-default'),
('Floki', 'label-default'),
('Overwatch', 'label-info'),
('Ragnar', 'label-default');

--
-- Indexes for dumped tables
--

--
-- Indexes for table `tags`
--
ALTER TABLE `tags`
  ADD PRIMARY KEY (`Tag`);


CREATE TABLE `post_tags` (
  `ID` int(11) NOT NULL,
  `PostID` int(11) NOT NULL,
  `tagID` tinytext NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

--
-- Dumping data for table `post_tags`
--

INSERT INTO `post_tags` (`ID`, `PostID`, `tagID`) VALUES
(1, 27, 'Cats'),
(2, 27, ' Ragnar'),
(3, 27, ' Floki'),
(4, 27, ' Arya');

--
-- Indexes for dumped tables
--

--
-- Indexes for table `post_tags`
--
ALTER TABLE `post_tags`
  ADD PRIMARY KEY (`ID`);

目标:

| Tag    | class
|--------|--------------
| Cats   | label-info
| Ragnar | label-default
| Arya   | label-danger
| Floki  | label-info

我尝试过使用此查询,但只返回了一行:

SELECT * FROM `tags` WHERE `Tag` IN 
(SELECT `tagID` FROM `post_tags` WHERE `post_tags`.`PostID` = 27)

2 个答案:

答案 0 :(得分:1)

在上面的实际数据集中,post_tags表包含以TagID列中的空格字符开头的行:Ragnar,Floki和Arya(Cats除外)。但标签表的标签列包含这些没有起始空间的项目。 因此,只有Cats显示在结果中。因此,要么从TagID中手动删除空格,要么使用TRIM函数在SQL查询中删除它们:

SELECT a.Tag, a.class FROM tags AS a LEFT JOIN post_tags AS b ON TRIM(b.tagID) = TRIM(a.Tag) WHERE b.PostID = "27"

希望这有帮助

答案 1 :(得分:-1)

我对你放入列中的鬃毛有问题:

但您可以运行以下脚本

select a.PostID,
       b.Tag,
       b.class
from post_tags a
inner join tags b on a.tagID=b.Tag
where a.PostID=27