首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何选择不在其他表中的项目?

如何选择不在其他表中的项目?
EN

Stack Overflow用户
提问于 2011-03-10 21:51:08
回答 3查看 1.2K关注 0票数 2

我想选择一种尚未翻译的语言。

omc_pages有

代码语言:javascript
复制
CREATE TABLE IF NOT EXISTS `omc_pages` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `path` varchar(255) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
  `lang_id` int(10) NOT NULL,
  ...
  PRIMARY KEY (`id`)
) 

INSERT INTO `omc_pages` (`id`, `path`, ...`lang_id`) VALUES
(26, 'about_us',... 0),
(44, 'about_us', ...1)...

这意味着path,about_us已经有英语和挪威语了。我假设key 0是英文的。

omc_languages有

代码语言:javascript
复制
CREATE TABLE IF NOT EXISTS `omc_languages` (
  `id` int(25) NOT NULL AUTO_INCREMENT,
  `langname` text COLLATE utf8_unicode_ci NOT NULL,
  `status` enum('active','inactive') COLLATE utf8_unicode_ci NOT NULL,
  PRIMARY KEY (`id`)
)

INSERT INTO `omc_languages` (`id`, `langname`, `status`) VALUES
(1, 'norwegian', 'active'),
(2, 'french', 'active')...

所以在这种情况下,我只想要“法语”。

我试过了,但给出了错误。

代码语言:javascript
复制
SELECT * FROM omc_languages WHERE omc_languages.id NOT IN 
(SELECT lang_id FROM omc_pages WHERE omc_pages.path = $path)

我也认为right join也许能够完成这项工作。

更新:我可以使用MySQL。错误如下所示。

代码语言:javascript
复制
Unknown column '$path' in 'where clause'

SELECT * FROM omc_languages WHERE omc_languages.id NOT IN (SELECT lang_id FROM omc_pages WHERE omc_pages.path = $path)
EN

回答 3

Stack Overflow用户

发布于 2011-03-10 21:54:52

这应该是可行的:

代码语言:javascript
复制
select distinct omc_languages.*
from omc_languages
left join omc_pages on omc_pages.lang_id = omc_languages.id
where omc_pages.id is null

但并没有真正优化。我在寻找另一种解决方案。

票数 0
EN

Stack Overflow用户

发布于 2011-03-10 22:52:13

好吧,你写的声明

代码语言:javascript
复制
SELECT * FROM omc_languages WHERE omc_languages.id NOT IN 
(SELECT lang_id FROM omc_pages WHERE omc_pages.path = 'about_us')

将给出字符串path在本例中为about_us未翻译的所有语言,如果这是您想要的。似乎您在使用@path变量时遇到了一些问题。但是,如果您想要尚未完全翻译的语言,您可以使用类似的方法,但不使用where子句。

代码语言:javascript
复制
SELECT * FROM omc_languages WHERE omc_languages.id NOT IN 
(SELECT lang_id FROM omc_pages )

当然,使用左连接也可以做到这一点。

票数 0
EN

Stack Overflow用户

发布于 2011-03-10 21:54:35

您好,使用right join很容易做到这一点:

代码语言:javascript
复制
SELECT *
FROM table1
RIGHT JOIN table2
ON table1.some_id = table2.some_id
WHERE table2.some_id IS NULL;

希望这能有所帮助。

票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5260496

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档