English 中文(简体)
声明根据加入书分一张表格
原标题:SQL statement to split a table based on a join

我有一个关于文章的主要表格,它通过一个综合表格“Info”链接到只有少数条目的表Tas。 我想通过删除行文,或根据与某一方没有联系,建立一个只列出我想要的条目的新桌子,来分割文章。 文章为数不多。 我如何能够这样做?

并非所有条款都有任何方面,有些条款有许多方面。

例:

table Articles
  primary_key id
table Info
  foreign_key article_id
  foreign_key tag_id
table Tags
  primary_key id

我很容易将那些确实与批号相匹配的条款分开,因此,我认为也许我可以这样做,然后使用国家航空航天研究所的一份声明,但是,如果它要结束,那就太慢了。 我是在这些指挥下这样做的:

INSERT INTO matched_articles SELECT * FROM articles a LEFT JOIN info i ON a.id = i.article_id WHERE i.tag_id = 5;
INSERT INTO unmatched_articles SELECT * FROM articles a WHERE a.id NOT IN (SELECT m.id FROM matched_articles m);

如果情况不同,请上课。

最佳回答
INSERT INTO matched_articles 
SELECT * FROM articles a LEFT JOIN info i ON a.id = i.article_id WHERE i.tag_id = 5; 

INSERT INTO unmatched_articles 
SELECT * FROM articles a WHERE a.id NOT IN (SELECT m.id FROM matched_articles m); 

这里存在如此严重的错误,我不敢确定何时开始。 在你的第一句话中,你不需要一个左边,事实上你实际上没有。 应当:

INSERT INTO matched_articles 
SELECT * FROM articles a INNER JOIN info i ON a.id = i.article_id WHERE i.tag_id = 5; 

如果你需要留任,你会与你一道,

INSERT INTO matched_articles 
SELECT * FROM articles a LEFT JOIN info i ON a.id = i.article_id AND i.tag_id = 5; 

当你把左边右边的东西放在条款的哪里(除了寻求无效价值之外),那么,你将其转换为内心,必须满足这一条件,因此,在右桌上没有相应的记录被删除。

现在,第二次发言可以与左派的特殊情况一起进行,尽管你们会做些什么。

INSERT INTO matched_articles 
SELECT * FROM articles a 
LEFT JOIN info i ON a.id = i.article_id AND i.tag_id = 5
WHERE i.tag_id is null

这将给你所有信息表中的记录,但与文章表相匹配的记录除外。

既然如此,你不应在不具体说明你想要插入的领域的情况下,写上“关键”。 您也不应使用某些发言,特别是如果您加入的话。 这通常是 s、zy,应当固定。 如果有人改变了其中一个表格的结构,而不是另一个表格? 这种事情对于维护来说是坏的,如果是一家公司,它会退回两倍(加入一栏),这是服务器和网络资源的浪费。 描述你需要什么,只说明你们需要什么。 因此,不去做任何生产法。

如果你目前的主食太慢,你也能够用正确的指数确定。 id田是否在两个表上编入指数? 另一方面,如果条款有数百万条,则需要时间插入这些条款。 有时甚至可能达到5 000万个集束,往往做得更好(如果要花太久,就算得太长)。 仅加上选择30最高纪录的斜体,然后排在受影响者未亡之前。

问题回答

你的问询只看ok,但首先应当是内ner,而不是左.。 如果你想尝试其他东西,则认为:

INSERT INTO matched_articles 
SELECT * 
FROM articles a 
INNER JOIN info i ON a.id = i.article_id 
WHERE i.tag_id = 5;

INSERT INTO unmatched_articles 
SELECT * 
FROM articles a 
LEFT JOIN info i ON a.id = i.article_id AND a.id <> 5
WHERE a.id IS NULL

这也许会更快,但事实上,如果你只需要做一次,你可能ok。

Not sure, if Postgres has a concept of a temporary table.
Here is how this can be done, as well.

CREATE Table #temp
AS SELECT A.ID, COUNT(i.*) AS Total
FROM Articles A
LEFT JOIN info i
ON A.id = i.Article_ID AND i.Tag_ID = 5
GROUP BY A.ID

INSERT INTO Matched_Articles
SELECT A.*
FROM Articles A INNER JOIN #temp t
ON A.ID = t.Article_ID AND T.Total = 0

DELETE FROM #Temp
WHERE Total = 0

INSERT INTO UnMatched_Articles
SELECT A.*
FROM Articles AINNER JOIN #temp t
ON A.ID = t.Article_ID

Note that I am not using any editor to try this out.
I hope this gives you hint on how I would approach this.





相关问题
摘录数据

我如何将Excel板的数据输入我的Django应用? I m将PosgreSQL数据库作为数据库。

Postgres dump of only parts of tables for a dev snapshot

On production our database is a few hundred gigabytes in size. For development and testing, we need to create snapshots of this database that are functionally equivalent, but which are only 10 or 20 ...

How to join attributes in sql select statement?

I want to join few attributes in select statement as one for example select id, (name + + surname + + age) as info from users this doesn t work, how to do it? I m using postgreSQL.

What text encoding to use?

I need to setup my PostgreSQL DB s text encoding to handle non-American English characters that you d find showing up in languages such as German, Spanish, and French. What character encoding should ...

SQL LIKE condition to check for integer?

I am using a set of SQL LIKE conditions to go through the alphabet and list all items beginning with the appropriate letter, e.g. to get all books where the title starts with the letter "A": SELECT * ...

热门标签