我想选择一种尚未翻译的语言。
omc_pages有
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)...
这意味着路径,about_us已经有英语和挪威语。我假设键0是英语。
omc_languages有
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')...
所以在这种情况下我只想得到“法语”。
我尝试了这个,但是出错了。
SELECT * FROM omc_languages WHERE omc_languages.id NOT IN
(SELECT lang_id FROM omc_pages WHERE omc_pages.path = $path)
我也认为正确的加入可能能够胜任。
更新:我使用的是MySQL。错误如下。
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)
答案 0 :(得分:0)
这应该有效:
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
但并未真正优化。我正在寻找另一种解决方案。
答案 1 :(得分:0)
你写的声明
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子句。
SELECT * FROM omc_languages WHERE omc_languages.id NOT IN
(SELECT lang_id FROM omc_pages )
当然也可以使用左连接。
答案 2 :(得分:-2)
嗨,这对于正确的加入来说相当简单:
SELECT *
FROM table1
RIGHT JOIN table2
ON table1.some_id = table2.some_id
WHERE table2.some_id IS NULL;
希望这有帮助。