0

我真的不擅长创建 MySQL 查询,需要一些帮助。我需要创建一个由 cron 作业每周触发一次的 bash 文件——它查询两个表,获取两个表中用户 ID 匹配的数据,并将选择数据添加到 CSV 导出文件中。我希望 CSV 用逗号分隔。现在最好的我可以把它标签分开。

我让这个查询运行的问题是我的语法(我知道这是错误的,因为我只是从网上各种文章中窃取了片段)。我确实让每个数据库查询单独工作(从一个表中获取一个查询,另一个表与另一个查询获取)。现在我需要将它们组合起来以仅获取我需要的数据。

这是我当前的(非工作)查询:

#!/bin/bash
mysql -u USERNAME --password=PASSWORD --database=xxxx_DBNAME --execute='SELECT `xxxx_videotraining_user.user_id`, `xxxx_videotraining_user.training_title`, `xxxx_videotraining_user.status`, `xxxx_users.id`, `xxxx_users.name`, `xxxx_users.user_employer`, `xxxx_users.user_ss_number` WHERE `xxxx_videotraining_user.user_id` = `xxxx_users.id` AND `xxxx_videotraining_user.status` = "Completed" AND `xxxx_users.user_ss_number` > "1" ORDER BY `xxxx_videotraining_user.user_id` LIMIT 0, 10000 AND ' -C > /home/xxxx/subs/vtc/DB_EXPORTS/xxxx_videotraining_completed.csv

我想你可以在这里看到我想要完成的事情 - 任何帮助将不胜感激!

4

2 回答 2

1

看起来您还缺少 FROM 子句,有一个尾随 AND 子句(如其他答案中所述),并且引用不正确。这看起来是您的原始查询:

SELECT `xxxx_videotraining_user.user_id`, 
       `xxxx_videotraining_user.training_title`, 
       `xxxx_videotraining_user.status`, 
       `xxxx_users.id`, 
       `xxxx_users.name`, 
       `xxxx_users.user_employer`, 
       `xxxx_users.user_ss_number` 
 WHERE `xxxx_videotraining_user.user_id` = `xxxx_users.id` AND 
       `xxxx_videotraining_user.status` = "Completed" AND 
       `xxxx_users.user_ss_number` > "1" 
ORDER BY `xxxx_videotraining_user.user_id` 
LIMIT 0, 10000 AND 

我认为您想添加 FROM 子句,分别引用表和字段,并删除尾随 AND,以获得类似:

    SELECT `xxxx_videotraining_user`.`user_id`, 
       `xxxx_videotraining_user`.`training_title`, 
       `xxxx_videotraining_user`.`status`, 
       `xxxx_users`.`id`, 
       `xxxx_users`.`name`, 
       `xxxx_users`.`user_employer`, 
       `xxxx_users`.`user_ss_number` 
  FROM `xxxx_users`,
       `xxxx_videotraining_user`
 WHERE `xxxx_videotraining_user`.`user_id` = `xxxx_users`.`id` AND 
       `xxxx_videotraining_user`.`status` = "Completed" AND 
       `xxxx_users`.`user_ss_number` > "1" 
ORDER BY `xxxx_videotraining_user`.`user_id` 
LIMIT 0, 10000

可以做其他事情来缩短查询的大小并使其更简洁,但这应该可以使其正常工作。

我知道在处理长查询时对我有帮助的一件事是像这样格式化它们,将主要子句分开,这样你就可以看到查询的不同部分。

让我知道这是否有帮助。

于 2013-09-13T22:08:35.160 回答
0

我认为 AND 不应该在这里:

LIMIT 0, 10000 AND
于 2013-09-13T21:57:08.507 回答