我正在尝试从第二个表格中提取信息(特别是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)
答案 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