如果表2上存在id,则获取表1数据

ehxuflar  于 2021-06-20  发布在  Mysql
关注(0)|答案(5)|浏览(566)
Table 1

Category ID | Category Name

1             Lorem 1
2             Lorem 2
3             Lorem 3

Table 2

Post ID     | Post Content  | Category ID
1             Post 1          2
2             Post 2          2
3             Post 3          1
4             Post 4          3

Result

Categories:
Lorem 1
Lorem 2
Lorem 3

类别名称仅在该类别中有帖子时显示。列表将使用li显示

ecfsfe2w

ecfsfe2w1#

$query =
"SELECT t1.cat_name
FROM t1,t2
WHERE t1.id = t2.cat_id
GROUP BY t1.cat_name";

您应该更改表/属性的名称,并选择您的宗教信仰、小写或大写字母以及camel或snakecase

t5zmwmid

t5zmwmid2#

将内部联接与distinct caluse一起使用:

select distinct CategoryName as categories from table1 a inner join table2 b
    on a.categoryid=b.categoryid
z4iuyo4d

z4iuyo4d3#

不需要太深入地了解 DISTINCT 与。 GROUP BY ,在这种情况下,我倾向于使用 DISTINCT ,因为您不使用聚合,而是在 SELECT 声明(详见本文:groupby和distinct之间有什么区别)。
有几种方法可以解决这个问题。有争议地使用 INNER JOIN 是可读性最高的版本(见下文),但是如果您的风格通常是运行大量子查询,那么子查询版本(见下文)可能会更吸引您:
内部联接方法:

SELECT DISTINCT t1.category_name AS categories
FROM table_1 t1
  INNER JOIN table_2 t2 ON t1.category_id = t2.category_id
ORDER BY 1

有关活动示例,请参见sql fiddle:http://sqlfiddle.com/#!9/51月19/5日
子查询方法:

SELECT t1.category_name AS categories
FROM table_1 t1
  WHERE category_id IN(
    SELECT DISTINCT category_id
    FROM table_2 t2
    )
ORDER BY 1

有关活动示例,请参见sql fiddle:http://sqlfiddle.com/#!9月51日19月6日

t5fffqht

t5fffqht4#

试试这个

SELECT DISTINCT table1.category_name
FROM table1
RIGHT JOIN table2 ON table1.category_id = table2.category_id;
wlzqhblo

wlzqhblo5#

解决方案

SELECT DISTINCT Table_1.Category_Name FROM Table_1 LEFT JOIN Table_2 ON Table_1.Category_ID = Table_2.Category_ID

相关问题