根据NULL字段选择表中选择公司ID之间的公共列?

时间:2014-04-15 14:58:26

标签: mysql

我有一个表格结构如下

calling_numb |called_num|cell_id|calling_loc|called_loc|company|cell_type|called_reg|c_site
+937779832423|+93799234323|C8435|   NULL    | NULL     | 77    | Nokia   | 44       |443543
+937883432424|+93700335234|S6700| 4     | 9        | 788   | 435341  | NULL     | NULL
+937999343324|+93788324234|W580 | Ghazni    |   Herat  | 799   | Kabul   | NULL     | NULL
+937003556322|+93788342343|K860 | 01        |   NULL   | 700   | NULL    | NULL     | 6823
+937778342453|+93700453423|L900 | 05        | 12       | 77    | Samsung | NULL     | NULL
+937994354356|+93789345435|K334 | Ghazni    | Herat    | 799   | Nokia   | NULL     | 3345
+937004353455|+93799033453|S6790| NULL      | NULL     | 700   | NULL    | xYZ      |34543 

真实表格中的表格的简要结构它有很多字段,现在我想得到的是通过检查公司的价值来为所有公司所共有的那些字段的列名称,例如:

select column_name from table where company = 77 
intersect 
select column_name from table where company = 799 
intersect 
select column_name from table where company = 700 
intersect 
select column_name from table where company = 788

我希望拥有的输出是calling_numbercalled_numbercell_id,这对于四家公司来说很常见

  

我从电信公司收到SIM的所有信息,例如我从公司A保存信息,从公司B保存信息,为C和C保存信息,这些公司对他们存储的数据有相同的字段我保存那些所有公司的同一列中的字段,但每个公司都有与其他公司不同的单独字段现在我想得的是表中的列名对于所有公司都是相同的,并且它们的值对于所有公司都不为空

5 个答案:

答案 0 :(得分:1)

以下代码对您有用。

$result = mysqli_query($con,"SELECT * FROM information_schema.columns where table_name='your_table_name'");
$columns = mysqli_fetch_array($result);/*This will retreive all columns from the specified tablename*/
$outcols=array();
$count=count($columns);
$i=0;
$inc=0;
while($i<$count)
{
$result=mysqli_query($con,"SELECT ".$columns[$i]." FROM your_table_name WHERE ".$columns[$i]." IS NULL");
$row = mysqli_fetch_array($result);
if(count($row)<=0)
{
$outcols[$inc]=$columns[$i];
$inc++;
}
$i++;
}
print_r($result);
  

上面的代码由我自己编码。检查出来。我相信它会有所帮助   你。如果你使用PHP访问MySQL数据库。   上面的代码将打印指定表中数据不为空的所有列名。

答案 1 :(得分:0)

我认为你正在使用mysql.you可以得到像这样的coloumn名称。

  

您可以获得call_number,called_number和cell_id与公司77等指定公司重复或共同的结果。

SELECT calling_number,called_number,cell_id 
from table_name 
where company IN (77,799,700,788) 
GROUP BY calling_number,called_number,cell_id 
HAVING count(*)>1

我认为这肯定会帮助您。 LIKE

  

我想要的输出是calling_number,called_number,   cell_id是四家公司常见的

答案 2 :(得分:0)

SELECT * 
from table_name 
where data is not null

对您需要的每一列重复<column> IS NOT NULL

答案 3 :(得分:0)

SELECT * 
from table_name 
where calling_numb is not null and called_num is not null and cell_id is not null and calling_loc is not null and called_loc is not null and company is not null and cell_type is not null and called_reg is not null and c_site is not null
  

这将检索所有非空的数据。

答案 4 :(得分:0)

为了获取我们想要搜索数据库information_schema的列名。在MySQL中存储所有数据,如表名,列名等。根据您的需要。就像这样。

SELECT GROUP_CONCAT(column_name) nonnull_columns
FROM information_schema.columns
WHERE table_name = 'your_table_name'
AND is_nullable = 'NO'
  

这肯定对你有帮助。